这是一份文档来记录自己入门python图形化(tkinter)开发的过程(o′┏▽┓`o) just a noob here
本文的学习路径基于GPT,命令GPT充当老师,并给出示例
2024/7/11
Task1:创建主窗口
import tkinter as tk
# 创建主窗口
root = tk.Tk()
root.title("Tkinter 基础窗口")
root.geometry("400x300") # 设置窗口大小为400x300像素
# 运行主事件循环
root.mainloop()
Attention:
- 设置窗口大小是小写的 ‘x’ 而不是 *
- tkinter 是 python 的内置库
- 需要加一个主事件循环 以下解释来源于这篇文章
注意,loop因为是循环的意思,window.mainloop就会让window不断的刷新,如果没有mainloop,就是一个静态的window,传入进去的值就不会有循环,mainloop就相当于一个很大的while循环,有个while,每点击一次就会更新一次,所以我们必须要有循环
所有的窗口文件都必须有类似的mainloop函数,mainloop是窗口文件的关键的关键。
Task2:添加和管理组件
import tkinter as tk
# 创建主窗口
root = tk.Tk()
root.title("Tkinter 组件示例")
root.geometry("400x300")
# 创建一个标签
label = tk.Label(root, text="Hello, Tkinter!")
label.pack(pady=10)
# 按钮点击事件的处理函数
def on_button_click():
label.config(text="Button Clicked!")
# 创建一个按钮
button = tk.Button(root, text="Click Me", command=on_button_click)
button.pack(pady=10)
# 运行主事件循环
root.mainloop()
预期效果:
- 创建一个标签,在按钮被点击后标签改变
Attention:
- 按钮的command对应的是函数名称,而不是函数,函数名称不带括号,函数带括号,参见这篇
- label.config()方法可以动态改变标签内容
1 def bracket(data):
2
3 return data
6
7 if __name__ == '__main__':
8
9 # 不带括号调用的结果:<function bracket at 0x0000000004DD0B38>,a是整个函数体,是一个函数对象,不须等该函数执行完成
10
11 a = bracket
12
13 print a
14
15 # 带括号调用的结果:6 ,b是函数执行后返回的值6,须等该函数执行完成的结果
16
17 b = bracket(6)
18
19 print b
- 注意到这里的pack()命令,这是一种布局方法,tkinter提供三种布局,除了pack以外,还有grid和place
Task3:使用 grid 布局
import tkinter as tk
# 创建主窗口
root = tk.Tk()
root.title("Tkinter Grid 示例")
root.geometry("300x200")
# 创建并放置用户名标签
username_label = tk.Label(root, text="Username:")
username_label.grid(row=0, column=0, padx=10, pady=10)
# 创建并放置用户名输入框
username_entry = tk.Entry(root)
username_entry.grid(row=0, column=1, padx=10, pady=10)
# 创建并放置密码标签
password_label = tk.Label(root, text="Password:")
password_label.grid(row=1, column=0, padx=10, pady=10)
# 创建并放置密码输入框
password_entry = tk.Entry(root, show="*")
password_entry.grid(row=1, column=1, padx=10, pady=10)
# 按钮点击事件的处理函数
def on_login_click():
print("Username:", username_entry.get())
print("Password:", password_entry.get())
# 创建并放置登录按钮
login_button = tk.Button(root, text="Login", command=on_login_click)
login_button.grid(row=2, column=0, columnspan=2, pady=10)
# 运行主事件循环
root.mainloop()
预期效果:
- 格式形如:用户:文本框(用于输入用户名)
- 输出文本框中的内容
Attention:
- grid布局将整个窗口看作是一个表格,根据列和行来确定元素的位置 参见这篇
-
这里有一点需要大家要特别注意,在一个程序中不能同时使用 pack() 和 grid() 方法,这两个方法只能二选一,否则程序会运行错误。
-
当使用 grid 函数布局的时,其实就是为各个控件指定行号、列号的过程,我们不需要为每个单元格指定大小,因为 grid 会为每个单元格自动设置一个适合的尺寸。