2024/7/13
Task1:事件处理
import tkinter as tk
# 创建主窗口
root = tk.Tk()
root.title("Tkinter 事件处理示例")
root.geometry("300x200")
# 创建一个标签来显示按键信息
label = tk.Label(root, text="Press any key")
label.pack(pady=20)
# 按键事件处理函数
def on_key_press(event):
label.config(text=f"Key pressed: {event.keysym}")
# 将按键事件绑定到主窗口
root.bind("<KeyPress>", on_key_press)
# 运行主事件循环
root.mainloop()
预期效果:
Attention:
- 利用了前文提到的label.config()来实现动态变化
- 关于bind()方法,可以绑定到窗口,标签,输入框等等,当被绑定的元素获得焦点 (正在使用) 的时候,就会触发对应的事件
- bind方法的参数需要两个
- 事件描述符:一个字符串,描述你要绑定的事件。例如,"" 表示鼠标左键点击事件。
- 事件处理函数:一个函数,当事件发生时会被调用。这个函数会自动接收一个
event
对象作为参数。
- bind支持的事件如下表,参见
事件 |
简介 |
<Button-detail> |
鼠标按键的单击事件,detail 指定哪个鼠标键被单击。例如单击鼠标左键为 <Button-1> ,单击鼠标中键为 <Button-2> ,单击鼠标右键为 <Button-3> ,单击向上滚动的滚轮为 <Button-4> ,单击向下滚动的滚轮为 <Button-5> |
<modifier Motion> |
鼠标在组件上的移动事件,modifier 指定要求按住的鼠标键。例如按住鼠标左键移动为 <B1-Motion> ,锁住鼠标杯中键移动为 <B2-Motion> ,按住鼠标右键移动为 <B3-Motion> |
<ButtonRelease-detail> |
鼠标按键的释放事件,detail 指定哪个鼠标按键释放。例如鼠标左键被释放为 <ButtonRelease-1> ,鼠标中键被释放为 <ButtonRelease-2> ,鼠标右键被释放为 <ButtonRelease-3> |
<Double-Button-detail> 或 <Double-detail> |
用户双击某个鼠标键的事件,detail 指定哪个鼠标键被双击。例如双击鼠标左键为 <Double-1> ,双击鼠标中键为 <Double-2> ,双击鼠标右键为 <Double-3> ,双击向上滚动的滚轮为 <Double-4> ,双击向下滚动的滚轮为 <Double-5> |
<Enter> |
鼠标进入组件的事件。注意,<Enter> 事件不是按下回车键事件,按下回车键的事件是 <Return> |
<Leave> |
鼠标移出组件事件 |
<FocusIn> |
组件及其包含的子组件获得焦点 |
<FocusOut> |
组件及其包含的子组件失去焦点 |
<Return> |
按下回车键的事件。实际上可以为所有按键绑定事件处理方法。特殊按键位名称包括 Cancel,BackSpace,Tab,Return(回车),Shift_L(左 Shift,如果只写 Shift 则代表两者),Control_L(左 Ctrl,如果只写 Control 则代表两者 Ctrl),Alt_L(左 Alt,如果只写 Alt 则代表左 Alt),Pause,Caps_Lock,Escape,Prior(Page Up),Next(Page Down),End,Home,Left,Up,Right,Down,Print,Insert,Delete,F1,F2,F3,F4,F5,F6,F7,F8,F9,F10,F11,F12,Num_Lock 和 Scroll_Lock |
<Key> |
键盘上任意键的单击事件,程序可以通过 event 获取用户单击了哪个键 |
a |
组件上指定键被单击的事件。例如 'a' 代表 a 键被单击,'b' 代表 b 键被单击(不要尖括号) |
<Shift-Up> |
在 Shift 键被按下时按 Up 键。类似的还有 <Shift-Left> 、<Shift-Down> 、<Alt-Up> 、<Control-Up> 等 |
<Configure> |
组件大小、位置改变的事件。例如改变了组件的大小、位置需要重新配置组件的宽度,height、x、y 获取 |
方法/属性 |
简介 |
event.keysym |
返回按下的键的符号名称。例如,按下'a'键时返回'a',按下Shift键时返回'Shift'。 |
event.char |
返回按下的键的字符。例如,按下'a'键时返回'a',按下Shift键时返回一个空字符串。 |
event.keycode |
返回按下的键的键码。例如,按下'a'键时返回65,按下Shift键时返回16。 |
event.x |
返回鼠标事件发生时鼠标指针的x坐标(相对于窗口)。 |
event.y |
返回鼠标事件发生时鼠标指针的y坐标(相对于窗口)。 |
event.x_root |
返回鼠标事件发生时鼠标指针的x坐标(相对于屏幕)。 |
event.y_root |
返回鼠标事件发生时鼠标指针的y坐标(相对于屏幕)。 |
event.type |
返回事件类型。例如,按下键盘按键时返回'2',释放按键时返回'3',鼠标按键点击时返回'4'。 |
event.widget |
返回触发事件的组件。例如,一个按钮被点击时,返回该按钮的引用。 |
event.state |
返回事件状态的修饰符。例如,Shift键被按下时返回'1',Control键被按下时返回'4'。 |
event.time |
返回事件发生的时间(自程序启动以来的毫秒数)。 |
event.num |
返回鼠标按键编号。例如,鼠标左键点击时返回1,中键点击时返回2,右键点击时返回3。 |
event.delta |
返回鼠标滚轮的滚动量。在Windows上,向前滚动返回120,向后滚动返回-120。 |
event.height |
返回组件被调整大小时的新高度(仅适用于事件)。 |
event.width |
返回组件被调整大小时的新宽度(仅适用于事件)。 |
event.xdata |
返回事件的x数据,仅适用于一些特殊事件,如虚拟事件()。 |
event.ydata |
返回事件的y数据,仅适用于一些特殊事件,如虚拟事件()。 |
event.serial |
返回事件序列号,这是一个唯一的标识符,用于区分事件。 |
event.num |
对于鼠标事件,返回鼠标按钮的编号。例如,1表示左键,2表示中键,3表示右键。 |
Task2:使用更多的 Tkinter 组件
import tkinter as tk
# 创建主窗口
root = tk.Tk()
root.title("Tkinter 组件示例")
root.geometry("400x300")
# 创建一个复选按钮
check_var = tk.BooleanVar()
checkbutton = tk.Checkbutton(root, text="Check me", variable=check_var)
checkbutton.pack(pady=10)
# 创建单选按钮
radio_var = tk.StringVar(value="Option1")
radiobutton1 = tk.Radiobutton(root, text="Option 1", variable=radio_var, value="Option1")
radiobutton2 = tk.Radiobutton(root, text="Option 2", variable=radio_var, value="Option2")
radiobutton1.pack(pady=5)
radiobutton2.pack(pady=5)
# 创建一个列表框
listbox = tk.Listbox(root)
listbox.insert(1, "Item 1")
listbox.insert(2, "Item 2")
listbox.insert(3, "Item 3")
listbox.pack(pady=10)
# 创建一个滑动条
scale = tk.Scale(root, from_=0, to=100, orient=tk.HORIZONTAL)
scale.pack(pady=10)
# 按钮点击事件的处理函数
def on_button_click():
print("Checkbox state:", check_var.get())
print("Selected radio button:", radio_var.get())
print("Selected listbox item:", listbox.get(tk.ACTIVE))
print("Scale value:", scale.get())
# 创建一个按钮
button = tk.Button(root, text="Print Values", command=on_button_click)
button.pack(pady=10)
# 运行主事件循环
root.mainloop()
预期效果:
- 创建复选按钮x1(选或者不选)
- 单选按钮x2(选哪个)
- 3个选项的列表框
- 滑动条x1(横向)
Attention:
- 创建按钮之前要先建立按钮的变量值 (使用tk库函数来进行初始化),按钮的
variable
属性可以传递变量值
- 初始化不同的值可以使得按钮默认被选中或不选
- 滑动条默认是竖向的,将
orient
属性设置为HORIZONTAL
可以改变为横向