GUI 图形界面,Tkinter 是 Python 内置的 GUI 库,IDLE 就是 Tkinter 设计的。
1. Tkinter 之初体验
import tkinter as tk
root = tk.Tk() # 创建一个窗口
root.title('窗口标题')
# 添加 label 组件
theLabel = tk.Label(root, text='文本内容')
theLabel.pack() # 可自动调节组件尺寸
root.mainloop() # 主事件循环
封装版
参数:
# 1. pack() 方法 side 参数:设置对齐方式,有 LEFT、RIGHT、TOP、TOTTOM 四个方位,默认 TOP
pack(side = tk.LEFT)
# 2. pack() 方法之 padx、pady 参数:自定义按钮偏移位置
pack(padx = 20, pady = 20) # 偏移 x、y 20 个像素
# 3. 前景算、背景色设置
tk.Button(fg='blue', bg='red')
import tkinter as tk
class Bar:
def __init__(self, root):
frame = tk.Frame(root) # 创建一个框架,里面添加一个 button 按钮,框架一般用于将组件分组
frame.pack(side=tk.LEFT, padx=20, pady=20)
# 创建一个按钮组件,fg(foreground 缩写,即前景色),command:调用函数
self.that = tk.Button(frame, text='打招呼', fg='blue', command=self.sya_hi)
self.that.pack(side=tk.LEFT) # side: 对齐 LEFT、RIGHT、TOP、TOTTOM 四个方位,默认 TOP
def sya_hi(self):
print('大家好,我是 rose~')
root = tk.Tk()
b = Bar(root)
root.mainloop()
2. Label 组件
Label 组件用于界面输出描述的标签,一般用作提示。
Label()
部分参数:
justify
:设置组件中文字对齐方式padx、pady
:组件与边框的距离text
:文本内容font、fg、bg
:文本字体、文字颜色、背景色compound
:CENTER,设置文本和图像混合模式(图像作为背景,文字在其上面)textvariable
:接收文本对象
# 创建一个文本 label 对象
var = StringVar()
var.set('你所下载的。。。')
theLabel = Label(textvariable=var, justify=LEFT)
theLabel.pack(side=LEFT)`
from tkinter import *
root = Tk()
textLabel = Label(root, text='你下载的影片含有未成年人限制内容,\n 请满18岁再观看!',
justify=LEFT, padx=10)
textLabel.pack(side=LEFT) # 可自助调节自身尺寸
photo = PhotoImage(file='3.gif') # 仅支持 gif 格式
imageLabel = Label(root, image=photo)
imageLabel.pack(side=RIGHT)
mainloop()
Tips: 图片仅支持
.gif
格式
设置背景图片
from tkinter import *
root = Tk()
photo = PhotoImage(file='3.gif') # 仅支持 gif 格式
textLabel = Label(root, text='你下载的影片含有未成年人限制内容,\n 请满18岁再观看!',
justify=LEFT, padx=10, compound=CENTER, image=photo, font=('华康少女字体', 20), fg='blue')
textLabel.pack(side=LEFT) # 可自助调节自身尺寸
mainloop()
3. Button 组件
Button 组件用于实现一个按钮,并且可以接收用户的输入信息。
Button()
参数:
command
:指定一个函数或方法,当用户点击按钮时,自动调用这个函数。可用来接收用户输入的值
from tkinter import *
def func(*args, **kwargs):
print(args, kwargs)
root = Tk()
frame1 = Frame()
frame2 = Frame()
# 创建一个文本 label 对象
var = StringVar()
var.set('你所下载的。。。')
theLabel = Label(frame1, textvariable=var, justify=LEFT)
theLabel.pack(side=LEFT)
# 创建一个图形 label 对象
photo = PhotoImage(file='3.gif')
imgLabel = Label(frame1, image=photo)
imgLabel.pack(side=RIGHT)
theButton = Button(frame2, text='已满', command=func)
theButton.pack()
frame1.pack(padx=10, pady=10)
frame2.pack(padx=10, pady=10)
mainloop()
4. CheckButton 组件
Checkbutton
多选按钮,RadioButton
单选按钮。
from tkinter import *
root = Tk()
# 定义一个变量,以确认该按钮是否被选中
v = IntVar()
c = Checkbutton(root, text='测试', variable=v)
c.pack()
# 选项被选中,v = 1,否则为 0
# 展示变量 v 的值
l = Label(root, textvariable=v)
l.pack()
mainloop()
四个选项
pack()
方法的 anchor
参数可用来设置选项对齐方式,共有八个方向(上北下南左西又东/ N、NE、E、SE、S、SW、W、NW)
from tkinter import *
root = Tk()
girls = ['西施', '王昭君', '貂蝉', '杨玉环']
v = []
for girl in girls:
v.append(IntVar())
b = Checkbutton(root, text=girl, variable=v[-1])
b.pack(anchor=W) # 设置左对齐
mainloop()
Menu 组件
from tkinter import *
root = Tk()
def callback():
print('...')
menubar = Menu(root)
# 下拉菜单 "文件",添加到顶级菜单中
filemenu = Menu(menubar, tearoff=False)
filemenu.add_command(label='打开', command=callback)
filemenu.add_command(label='保存', command=callback)
filemenu.add_separator()
filemenu.add_command(label='退出', command=quit)
menubar.add_cascade(label='文件', menu=filemenu)
# 编辑下拉菜单
editmenu = Menu(menubar, tearoff=False)
editmenu.add_command(label='剪切', command=callback)
editmenu.add_command(label='拷贝', command=callback)
editmenu.add_command(label='粘贴', command=callback)
menubar.add_cascade(label='编辑', menu=editmenu)
root.config(menu=menubar)
mainloop()