bit*_*ack 3 python combobox tkinter python-3.x
我在Python 3.5.2中使用了一个tkk.Combobox主题小部件.我希望在选择值时执行操作.
在Python 文档中,它说:
<<ComboboxSelected>>
当用户从值列表中选择元素时,组合框小部件生成虚拟事件.
这里的堆栈,有一些答案(的1,2,等等),显示如何绑定事件:
cbox.bind("<<ComboboxSelected>>", function)
Run Code Online (Sandbox Code Playgroud)
但是,我无法使其发挥作用.这是一个非常简单的例子,展示了我的无效功能:
import tkinter as tk
from tkinter import ttk
tkwindow = tk.Tk()
cbox = ttk.Combobox(tkwindow, values=[1,2,3], state='readonly')
cbox.grid(column=0, row=0)
cbox.bind("<<ComboboxSelected>>", print("Selected!"))
tkwindow.mainloop()
Run Code Online (Sandbox Code Playgroud)
我得到一个"被选中"的例子.当我运行此代码时,即使没有点击任何内容.但是当我在组合框中选择一些东西时没有任何反应.
我在Windows 7中使用IDLE,以防它有所作为.
我错过了什么?
nbr*_*bro 10
问题不在于事件<<ComboboxSelected>>
,而在于bind
函数需要回调作为第二个参数.
当你这样做时:
cbox.bind("<<ComboboxSelected>>", print("Selected!"))
Run Code Online (Sandbox Code Playgroud)
你基本上把调用的结果分配给print("Selected!")
回调.
要解决您的问题,您可以简单地分配一个函数对象,以便在事件发生时调用(选项1,这是可取的)或使用lambda函数(选项2).
这是选项1:
import tkinter as tk
from tkinter import ttk
tkwindow = tk.Tk()
cbox = ttk.Combobox(tkwindow, values=[1,2,3], state='readonly')
cbox.grid(column=0, row=0)
def callback(eventObject):
print(eventObject)
cbox.bind("<<ComboboxSelected>>", callback)
tkwindow.mainloop()
Run Code Online (Sandbox Code Playgroud)
注意没有()
经过callback
在:cbox.bind("<<ComboboxSelected>>", callback)
.
这是选项2:
import tkinter as tk
from tkinter import ttk
tkwindow = tk.Tk()
cbox = ttk.Combobox(tkwindow, values=[1,2,3], state='readonly')
cbox.grid(column=0, row=0)
cbox.bind("<<ComboboxSelected>>", lambda _ : print("Selected!"))
tkwindow.mainloop()
Run Code Online (Sandbox Code Playgroud)
检查什么是lambda函数以及如何使用它们!
查看本文以了解有关事件和绑定的更多信息:
http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm
归档时间: |
|
查看次数: |
9663 次 |
最近记录: |