项目的第一步就是编写需要的界面,我们使用 Python 标准的 GUI 库 Tkinter 来实现。这一节就快速学习该库中将会用到的控件,为搭建图形界面做准备。
- 主窗口
- 主菜单
- 文本控件
- 其他控件
1. 主窗口

tk.Tk 是 Tkinter 中的主窗口类,它是创建图形用户界面(GUI)应用程序的起点。Tk 表示 “ToolKit”,是一个跨平台的图形用户界面工具包,用于创建窗口、按钮、文本框、标签等 GUI 元素,并为它们添加事件处理、布局管理等功能。
import tkinter as tk
# 主窗口
def test():
# 实例化窗口对象
window = tk.Tk()
# 参数为 str 类型,格式为: '宽x高+X坐标+Y坐标'
window.geometry('500x300+200+200')
# 设置窗口标题
window.title('主窗口')
# 设置固定大小,width=None, height=None
window.resizable(False, False)
# 窗口主循环
window.mainloop()
if __name__ == '__main__':
test()
2. 菜单控件

tk.Menu 是 Tkinter 中用于创建菜单的类,它允许你在图形用户界面(GUI)应用程序中添加菜单栏和菜单项,以提供用户导航和选择功能。菜单可以包含各种命令、选项和子菜单,用于组织和执行不同的操作。菜单控件要了解的内容包括:
- 普通菜单
- 多级菜单
- 单选菜单
- 多选菜单
- 分割线
import tkinter as tk
# 主窗口
def test():
window = tk.Tk()
window.geometry('500x300+200+200')
# 初始化主菜单控件
main_menu = tk.Menu()
# 1. 添加普通菜单
main_menu.add_command(label='文件', command=lambda : print('文件菜单点击'))
main_menu.add_command(label='编辑', command=lambda : print('编辑菜单点击'))
# 2. 添加多级菜单
cascade_menu = tk.Menu(tearoff=False) # tearoff 从主窗口剥离
cascade_menu.add_command(label='子菜单1', command=lambda : print('子菜单1'))
cascade_menu.add_command(label='子菜单2', command=lambda : print('子菜单2'))
cascade_menu.add_command(label='子菜单3', command=lambda : print('子菜单3'))
main_menu.add_cascade(label='多级菜单', menu=cascade_menu)
# 3. 添加单选菜单
radio_menu = tk.Menu(tearoff=False)
radio_value = tk.StringVar()
def on_radio_button_click():
print('选中的值:', radio_value.get())
radio_menu.add_radiobutton(label='中国', variable=radio_value, value='中国', command=on_radio_button_click)
radio_menu.add_radiobutton(label='美国', variable=radio_value, value='美国', command=on_radio_button_click)
radio_menu.add_radiobutton(label='德国', variable=radio_value, value='德国', command=on_radio_button_click)
main_menu.add_cascade(label='单选菜单', menu=radio_menu)
# 4. 添加多选菜单
checkbox_menu = tk.Menu(tearoff=False)
state1 = tk.BooleanVar(value=False)
state2 = tk.BooleanVar(value=False)
state3 = tk.BooleanVar(value=False)
def on_checkbox_button_click():
if state1.get():
print('足球选中')
if state2.get():
print('篮球选中')
if state3.get():
print('冰球选中')
print('-' * 10)
checkbox_menu.add_checkbutton(label='足球', variable=state1, command=on_checkbox_button_click)
checkbox_menu.add_checkbutton(label='篮球', variable=state2, command=on_checkbox_button_click)
checkbox_menu.add_checkbutton(label='冰球', variable=state3, command=on_checkbox_button_click)
main_menu.add_cascade(label='多选菜单', menu=checkbox_menu)
# 5. 添加分割线
seperator = tk.Menu(tearoff=False)
seperator.add_command(label='子菜单1')
seperator.add_command(label='子菜单2')
seperator.add_separator()
seperator.add_command(label='子菜单3')
main_menu.add_cascade(label='菜单分割线', menu=seperator)
# 将菜单设置到主窗口上
window.config(menu=main_menu)
window.mainloop()
if __name__ == '__main__':
test()
3. 文本控件

文本控件需要了解的内容如下:
- 无滚动条 Text 控件
- 带滚动条 ScrolledText 控件
- 用于组合分割效果的 PanedWindow 控件
import tkinter as tk
from tkinter.scrolledtext import ScrolledText
# 1. Text
def test01():
window = tk.Tk()
window.geometry('500x300+200+200')
text_area = tk.Text()
# 1. 跟随父控件伸缩 TOP、BOTTOM、LEFT、RIGHT
# text_area.pack(side=tk.RIGHT)
# 2. 跟随父控件伸缩 X、Y、BOTH
text_area.pack(fill=tk.BOTH, expand=True)
# 3. 设置其他属性
# wrap: 是否自动换行 NONE、WORD
# bg: 背景颜色,例如:red
# fg: 前景颜色,例如: white
# font: 字体样式 (字体, 大小, 样式) 样式: normal bold italic underline overstrike
# state: 控件的状态 NORMAL、DISABLED
text_area.config(bg='red', fg='white', font=('楷体', 20, 'underline'))
# 4. 添加内容
# 4.1 尾部添加内容
text_area.insert(tk.END, '我是中国人\n')
text_area.insert(tk.END, '我是中国人\n')
text_area.insert(tk.END, '我是中国人\n')
# 4.2 指定位置添加内容
# 在光标位置插入,# '2.0' 表示第 2 行的第 0 个字符位置
text_area.mark_set('insert', '2.0')
text_area.insert(tk.INSERT, '《接着插入》')
text_area.insert('2.0', '新的一行内容\n')
# 4.3 预定义字体颜色
text_area.tag_configure("font1", font=("宋体", 10, 'overstrike'), foreground="yellow")
text_area.tag_configure("font2", font=("楷体", 12, 'underline'), foreground="black")
text_area.insert(tk.END, '根据字体插入文本\n', 'font1')
text_area.insert(tk.END, '根据字体插入文本\n', 'font2')
# 5. 获得文本框内容
# 参数为开始位置 结束位置
my_text = text_area.get('1.0', tk.END)
print('文本框内容:\n', my_text)
window.mainloop()
# 2. ScrolledText
def test02():
window = tk.Tk()
window.geometry('500x300+200+200')
text_area = ScrolledText()
text_area.pack(fill=tk.BOTH, expand=True)
window.mainloop()
# 3. PanedWindow
def test03():
window = tk.Tk()
window.geometry('500x300+200+200')
# window.resizable(False, False)
# orient: VERTICAL、HORIZONTAL
paned = tk.PanedWindow(orient=tk.HORIZONTAL)
paned.pack(fill=tk.BOTH, expand=True)
text1 = tk.Text()
text2 = ScrolledText()
# 添加 text1 控件,并设置 text1 控件宽度
paned.add(text1, width=250)
paned.add(text2)
window.mainloop()
if __name__ == '__main__':
test03()
4. 其他控件
TKinter 中还提供了很多其他的控件,例如:标签控件、按钮控件等等
import tkinter as tk
# 1. 标签控件
def test01():
window = tk.Tk()
window.geometry('500x300+200+200')
# 创建标签对象
label = tk.Label(master=window, text='准备就绪', bg='#bdc3c7')
label.pack(side=tk.BOTTOM)
# 修改标签文字
label['text'] = 'Hello World'
window.mainloop()
# 2. 按钮控件
def test02():
window = tk.Tk()
window.geometry('500x300+200+200')
# 创建按钮对象
button = tk.Button(text='按钮', command=lambda : print('按钮点击了'))
button.pack(side=tk.BOTTOM)
window.mainloop()
# 3. 容器控件
def test03():
window = tk.Tk()
window.geometry('500x300+200+200')
# 创建一个容器控件
frame = tk.Frame(window, width=300, height=200)
frame.configure(borderwidth=0, bg='#bdc3c7')
# 在 Frame 中创建两个子控件
button1 = tk.Button(frame, text='按钮1', command=lambda : print('按钮点击了'))
button1.place(x=10, y=10)
button2 = tk.Button(frame, text='按钮2', command=lambda: print('按钮点击了'))
button2.place(x=100, y=100)
frame.pack(side=tk.BOTTOM)
window.mainloop()
if __name__ == '__main__':
test03()



冀公网安备13050302001966号