Форма Tkinter отстает в отображении данных при прокрутке - PullRequest
0 голосов
/ 08 апреля 2019

У меня небольшое графическое приложение с Tkinter. очень просто код получает список опций и показывает их как флажок пользователю и ждет выбора пользователя. для выполнения своей задачи я помещаю холст и рамку внутри него, а затем связываю полосу прокрутки тоже холстом. Также, поскольку у меня было неизвестное количество флажков, я сначала помещаю их все в метку, а затем помещаю метку в рамку. все работает и полоса прокрутки тоже. но есть небольшая проблема, которая заключается в следующем: когда я открываю окна, у меня есть список в форме, но при прокрутке они имеют « Lag » и не отображаются в моей форме, НО они отображаются как я наведите мышь на область. (Как классические заморозки окон).

Код:

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

1 Ответ

0 голосов
/ 10 апреля 2019

из комментария @stovfl Я понял, что у меня есть дополнительные вторичные метки.

Я просто опустил метку внутри функции populateCheckBox () и поставил свои флажки прямо на рамку на холсте.

изменить на: checkbox = tk.Checkbutton (self.frame, рельеф = "плоский")

...