Tkinter窗体在滚动时显示数据时滞后

2024-03-29 08:42:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有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"))

打开页面时

enter image description here

滚动时

enter image description here


Tags: 代码self列表vardefframelabelpack
1条回答
网友
1楼 · 发布于 2024-03-29 08:42:01

从@stovfl的评论中,我了解到我有一些次要的额外标签。你知道吗

我只是省略了populateCheckBox()函数中的标签,并将复选框直接放在画布上的框架上。你知道吗

更改为:复选框=tk.检查按钮(自行车架,relief=“扁平”)

相关问题 更多 >