У меня есть небольшое приложение с графическим интерфейсом с Tkinter. очень просто код получает список параметров и показывает их пользователю как флажок и ожидает выбора пользователя. для выполнения своей задачи я поместил холст и рамку внутри него, а затем привязал полосу прокрутки к холсту. Кроме того, поскольку у меня было неизвестное количество флажков, я сначала поместил их все в метку, а затем поместил метку на свой кадр. все работает и полоса прокрутки тоже. но есть небольшая проблема, а именно: когда я открываю окна, у меня есть список в форме, но когда я прокручиваю, они имеют «отставание» и не отображаются в моей форме, НО они отображаются как я парить мышь на области. (как классическое замерзание окон).
Код:
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 Поскольку у меня есть несколько кнопок-флажков, я помещаю их все на метку, а затем помещаю метку на рамку.
Не удалось воспроизвести вашу проблему, ваш минимальный воспроизводимый пример у меня не работает. Попробуйте, поменяйте на self.canvas.bind("<Configure>",...
из комментария @stovfl я понял, что у меня есть какие-то второстепенные лишние ярлыки.
Я просто опустил метку внутри функции populateCheckBox() и поместил флажки прямо в рамку на холсте.
изменить на: флажок = tk.Checkbutton (self.frame, рельеф = "плоский")
Какой смысл помещать
tk.Checkbutton(label,...
вtk.Label(...
?