文章目录
0x00 前言
Python 提供了多个图形开发界面的库,几个常用 Python GUI 库如下:
-
Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。
-
wxPython:wxPython 是一款开源软件,是 Python 语言的一套优秀的 GUI 图形库,允许 Python 程序员很方便的创建完整的、功能健全的 GUI 用户界面。
-
Jython:Jython 程序可以和 Java 无缝集成。除了一些标准模块,Jython 使用 Java 的模块。Jython 几乎拥有标准的Python 中不依赖于 C 语言的全部模块。比如,Jython 的用户界面将使用 Swing,AWT或者 SWT。Jython 可以被动态或静态地编译成 Java 字节码。
Tkinter 编程
Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。
由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如。
注意:Python3.x 版本使用的库名为 tkinter,即首写字母 T 为小写。
import tkinter
创建一个GUI程序
1、导入 Tkinter 模块
2、创建控件
3、指定这个控件的 master, 即这个控件属于哪一个
4、告诉 GM(geometry manager) 有一个控件产生了。
实例:
import tkinter
top = tkinter.Tk()
# 进入消息循环
top.mainloop()
运行效果如下:
0x01 窗口标题、尺寸
设置窗口名称
win.wm_title("hello Herbert555")
设置窗口最小尺寸
win.minsize(width=666, height=480)
设置窗口最大尺寸
win.maxsize(width=666, height=480)
实例如下:
import tkinter as tk
win = tk.Tk() # 创建GUI 应用程序的主窗口
win.wm_title("hello Herbert555") # 窗口名称
win.minsize(width=666, height=480) # 窗口最小尺寸为666,480
win.maxsize(width=666, height=480) # 窗口最大尺寸为666,480
win.resizable(width=False, height=False) # 固定尺寸
win.mainloop() # 程序做无限循环
运行结果
0x02 设置文字label
语法格式如下:
w = Label ( master, option, ... )
-
master: 框架的父容器。
-
options: 可选项,即该标签的可设置的属性。这些选项可以用键-值的形式设置,并以逗号分隔。
实例:
添加一些文字,并指定不同的位置,颜色
import tkinter as tk
win = tk.Tk() # 创建GUI 应用程序的主窗口
win.wm_title("hello Herbert555") # 窗口名称
win.minsize(width=666, height=480) # 窗口最小尺寸为666,480
win.maxsize(width=666, height=480) # 窗口最大尺寸为666,480
win.resizable(width=False, height=False) # 固定尺寸
label = tk.Label(win, text="Hello Herbert555") # 创建文字内容
label.pack() # 加入组件
label2 = tk.Label(win, text="This is lable2", fg="red", bg="yellow") # 创建文字内容
label2.pack() # 加入组件
label3 = tk.Label(win, text="This is lable3") # 创建文字内容
label3.pack(side="top", anchor="w") # 加入组件,靠上方,靠西west
label4 = tk.Label(win, text="This is lable4") # 创建文字内容
label4.place(x=120, y=60) # 指定组件位置,x=20,y=60
label5 = tk.Label(win, text="This is lable5", bg="#ff0000")
label5.place(x=240, y=240)
win.mainloop() # 程序做无限循环
运行结果:
0x03 显示图片Image
首先需要安装Pillow
模块,读入图片可以使用PIL模块,该模块放在Pollow中,实例:
读取本地的图片并显示
import tkinter as tk
from PIL import Image, ImageTk # 导入图片模块
win = tk.Tk() # 创建GUI应用程序主窗口
img = ImageTk.PhotoImage(Image.open("C:/Users/DELL/Pictures/0.jpg")) # 读入图片
label1 = tk.Label(win, image=img) # 指定该lable显示图片
label1.pack() # 加入组件
win.mainloop() # 程序做无限循环
运行结果:
0x04 按键Button与消息窗口tkMessageBox
按键语法格式如下:
w = Button ( master, option=value, ... )
-
master: 按钮的父容器。
-
options: 可选项,即该按钮的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。
消息窗口语法;
tkMessageBox.xxxxx(title, message, options)
其中的title自然是对话框的标题,message是显示的内容,对于options
实例:
按下press me按钮时,弹出消息窗口
import tkinter as tk
from tkinter import messagebox
def event1(): # 预定义函数event1()
messagebox.showinfo("Say Hello", "Hello Herbert555") # 弹窗
win = tk.Tk()
btn = tk.Button(win, text="press me", command=event1) # 按键,按下时调用event1()
btn.pack() # 加入组件
win.mainloop() # 程序做无限循环
按下press me
0x05 输入框 Entry
语法格式如下:
w = Entry( master, option, ... )
-
master: 按钮的父容器。
-
options: 可选项,即该按钮的可设置的属性。这些选项可以用键 = 值的形式设置,并以逗号分隔。
实例:
在输入框内输入什么就显示什么
import tkinter as tk
def event():
print(entry.get()) # 显示文字
t1 = entry.get()
v.set(t1) # 把entry的文字放入lable中
win = tk.Tk()
entry = tk.Entry() # 新增输入框Entry
entry.pack()
btn = tk.Button(win, text="press me", command=event) # 按键,按下时调用event
btn.pack()
v = tk.StringVar() # 组件变量
lable = tk.Label(win, text="Hello Herbert555", textvariable=v) # 新增文字
lable.pack()
v.set("New Text!") # 设置文字符件的文字
win.mainloop()
运行结果:
0x06 绘图Canvas
使用Canvas绘图的功能,画出圆饼图,显示图片等效果
import tkinter as tk
from PIL import Image, ImageTk
win = tk.Tk() # 创建GUI应用程序的主窗口
c = tk.Canvas(win, width=1000, height=1000) # 设置绘图的尺寸
coord = 10, 10, 100, 100
arc = c.create_arc(coord, start=0, extent=350, fill="red") # 画红色圆饼
img = ImageTk.PhotoImage(Image.open("C:/Users/DELL/Pictures/0.jpg"))
c.create_image(300, 100, image=img) # 显示图片
c.create_line(500, 100, 600, 10, fill="red", width=3) # 画红线
c.create_text(700, 50, text="Hello Herbert555") # 显示文字
c.create_rectangle(800, 50, 900, 100, fill="blue") # 画蓝色矩形
def paint(event): # 画画功能
python_green = '#476042'
x1, y1 = (event.x - 1), (event.y - 1) # 取得鼠标按下的位置
x2, y2 = (event.x + 1), (event.y + 1)
c.create_oval(x1, y1, x2, y2, fill=python_green) # 画圆点
c.bind("<B1-Motion>", paint) # 取得鼠标位置
c.pack() # 加入组件
win.mainloop() # 程序做无线循环
运行结果