from tkinter import *
from tkinter.ttk import *
month = (1,2,3,4,5,6,7,8,9,10,11,12)
def func1(self,event = None):
var = self.CB1.get()
print(var)
print("Your Birthday is: " + var)
class app():
def __init__(self):
window = Tk()
self.CB1 = Combobox(window,values = month,state = "readonly")
self.CB1.current(0)
self.CB1.bind("<<ComboboxSelected>>", func1(self,event = None))
self.CB1.pack()
window.mainloop()
app()
因此它会输出1,然后说“你的生日是1”,如果我选择不同的号码,它将不再这样做。我已经尝试了10多个不同的页面来理解组合框,我很难理解。任何帮助,将不胜感激。感谢所有帮助的人。
答案 0 :(得分:2)
这是因为在行
中self.CB1.bind("<<ComboboxSelected>>", func1(self,event = None))
func1
直接执行,结果(None
)被指定为绑定“函数”。使用像这样的lambda表达式:
self.CB1.bind("<<ComboboxSelected>>", lambda x: func1(self, x))
现在你将匿名函数绑定到事件而不执行它。
答案 1 :(得分:1)
关于lambda
函数的@TidB答案以及为什么你的组合框只运行一次绝对正确!
但我对你如何建立课程以及如何在课堂外传递self
和event
感到困惑。这真的是你想要的,还是你想做这样的事情?
try:
import tkinter as tk
import tkinter.ttk as ttk
except ImportError:
import Tkinter as tk
import ttk
month = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
class App():
def __init__(self):
window = tk.Tk()
self.CB1 = ttk.Combobox(window, values=month, state="readonly")
self.CB1.current(0)
self.CB1.bind("<<ComboboxSelected>>", self.func1)
self.CB1.pack()
window.mainloop()
def func1(self, event=None):
var = self.CB1.get()
print(var)
print("Your Birthday is: " + var)
App()
Python隐含地传递了您的self
和event
,那么为什么您要尝试做同样的工作呢?
所以我认为一个真正的问题源于你的班级结构。这就是为什么你的组合框只运行一次的真正原因。