【发布时间】:2014-01-10 22:07:37
【问题描述】:
我正在对this post 的技术进行自己的调整,使用画布与文本小部件来更好地控制滚动行为。我的代码如下所示。
一切都按我的意愿工作,但由于某种原因,我用来跟踪检查按钮值的trace 不起作用。控制台窗口中不会显示任何类型的错误。但是当我单击任何一个复选按钮时,我没有收到预期的打印消息(来自_cbWasClicked)。据我所知,该方法从未被调用过。
我知道这一定是一个简单而明显的错误,但我很难过。我已经使用 print 语句来确认 100 IntVars 已按预期实例化。然后我故意把.trace中的方法名拼错了,这次就报错了。因此,当我拉出这些诊断调整时,所有应该都可以工作....只是不行。有人可以告诉我我缺少什么吗?
环境是 Windows 7 上的 Python 2.7。
import Tkinter as tk
class myCheckList(tk.Frame):
def __init__(self, root, *args, **kwargs):
tk.Frame.__init__(self, root, *args, **kwargs)
self.root = root
self.vsb = tk.Scrollbar(self, orient="vertical")
self.canvas = tk.Canvas(self, width=200, height=290,
relief=tk.GROOVE,bd=3,
scrollregion=(0,0,0,2020),
yscrollcommand=self.vsb.set,
yscrollincrement=20)
basecolor = self.canvas.cget('background')
self.vsb.config(command=self.canvas.yview)
self.canvas.grid(row=0,column=0,sticky=tk.NSEW,padx=(0,0),pady=0)
self.vsb.grid(row=0,column=1,sticky=tk.NS,padx=(0,0),pady=0)
for i in range(100):
cbv = tk.IntVar()
cbv.trace('w',self._cbWasClicked)
cb = tk.Checkbutton(self, background=basecolor,
variable=cbv,
text="Checkbutton #%s" % i)
self.canvas.create_window(5,20*i+5,anchor=tk.NW,window=cb)
self.canvas.bind_all('<MouseWheel>',
lambda event: self.canvas.yview_scroll(-1*event.delta/120, tk.UNITS))
def _cbWasClicked(self,*args):
print 'checkbox clicked'
if __name__ == "__main__":
root = tk.Tk()
myCheckList(root).grid(row=0,column=0,sticky=tk.W,padx=0,pady=0)
root.mainloop()
【问题讨论】:
标签: python-2.7 tkinter