我有Tkinter的小型GUI应用程序。非常简单的代码就是获取一个选项列表,并将它们作为复选框显示给用户,然后等待用户选择。 为了执行我的任务,我把一个画布和一个框架放在里面,然后把滚动条也绑定到画布上,也因为我有未知数量的复选框,所以我先把它们全部放在一个标签里,然后把标签放在我的框架上。 一切工作和滚动条太。 但有一个小问题,那就是:当我打开窗口时,我的列表在窗体上,但当我滚动时,它们有“滞后”,并且不会出现在我的窗体上,但是当我将鼠标悬停在区域上时,它们就会出现(就像经典的窗口冻结一样)。你知道吗
代码:
class StartPage(tk.Frame):
testListOut = []
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.testList = []
self.canvas = tk.Canvas(self, borderwidth=2, relief="sunken")
self.frame = tk.Frame(self.canvas)
self.scrollbar = tk.Scrollbar(self.canvas, orient="vertical", command=self.canvas.yview)
self.canvas.configure(yscrollcommand=self.scrollbar.set)
self.scrollbar.pack(side="right", fill="y")
self.canvas.pack(side="top", fill="both" ,expand="true")
self.canvas.create_window((4, 4), window=self.frame, anchor="nw",tags="self.frame")
self.frame.bind("<Configure>", self.onFrameConfigure)
self.populateCheckBox(lNames)
def populateCheckBox(self ,testList):
self.checks = []
self.vars = []
label = tk.Label(self.frame , width=3, borderwidth="1")
label.pack()
for element in testList:
var = tk.BooleanVar()
var.set(False)
checkbox = tk.Checkbutton(label, relief="flat")
checkbox["text"] = element
checkbox["command"] = lambda: self.handler(testList)
checkbox["variable"] = var
checkbox.grid(sticky="w", padx="10", pady="5")
self.checks.append(checkbox)
self.vars.append(var)
def onFrameConfigure(self, event):
self.canvas.configure(scrollregion=self.canvas.bbox("all"))
打开页面时
滚动时
从@stovfl的评论中,我了解到我有一些次要的额外标签。你知道吗
我只是省略了populateCheckBox()函数中的标签,并将复选框直接放在画布上的框架上。你知道吗
更改为:复选框=tk.检查按钮(自行车架,relief=“扁平”)
相关问题 更多 >
编程相关推荐