我正在做我自己的技術調整從this post,使用畫布與文本小部件來更好地控制滾動行爲。我的代碼出現在下面。跟蹤不工作在Python TKinter checkbutton控制
所有工作正如我想要的,但由於某種原因,我用的trace
跟蹤checkbutton值不工作。在控制檯窗口中不會出現任何類型的錯誤。但是當我點擊任何一個檢查按鈕時,我沒有收到預期的打印信息(來自_cbWasClicked
)。盡我所能地告訴該方法從未被調用過。
我知道這應該是一個簡單而明顯的錯誤,但我很難過。我使用了print
語句來確認100 IntVars
已按預期方式實例化。然後我故意拼寫.trace
中的方法名稱,這次它產生了一個錯誤。所以當我抽出這些診斷調整所有應該正在工作....它只是不是。有人能告訴我我錯過了什麼嗎?
環境是Python 2.7版在Windows 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()