Размер ошибки Tkinter Scrollregion при настройке - PullRequest
0 голосов
/ 25 июня 2019

У меня есть приложение с 2 областями прокрутки.Первое (главное) - это корневое окно, которое содержит все.Второй (вспомогательный) находится внутри первого и содержит некоторый текст.

Основной свиток работает нормально, однако вторая, кажется, пытается изменить свой размер всякий раз, когда я пытаюсь прокрутить его.Это приводит к сбою, миганию и, наконец, может фактически остановиться на большем размере, пока не будет перенастроен.

Я ищу какие-либо решения этой проблемы с помощью изменений кода или других модулей tkinter, которые я могу использоватьподдержка ручной и колесико мыши прокрутки.

Код:

from Tkinter import *

class GUI:
    def __init__(self):
        self.root = Tk()
        self.main()

    def update_scrollregion(self, event, can): ##the default option for interacting with scrollbar
        can.configure(scrollregion=can.bbox("all"))

    def main(self):
        self.root.geometry("400x300")
        ##Start Of Layout
        main_canvas=Canvas(self.root)
        main_subframe=Frame(main_canvas)
        main_vbar=Scrollbar(main_canvas,orient=VERTICAL, command=main_canvas.yview)
        main_canvas.config(yscrollcommand=main_vbar.set)
        main_vbar.pack(side=RIGHT,fill=Y)
        main_canvas.pack(side=TOP,expand=True,fill=BOTH)
        main_canvas.create_window((4,4), window=main_subframe, anchor = NW, tags="frame")
        main_subframe.bind("<Configure>",  lambda e=Event(), c=main_canvas: self.update_scrollregion(e, c))


        for i in range(5): ##make some other objects to make the page bigger
            Label(main_subframe, text="This is some beginning spacer text").pack(side=TOP)


        ##Main Issues are here with glitch size updates when calling the update_scrollregion method it attments to resize the canvas/subframe
        mytext = 'This is a Test\r\n ' * 30 ##some multi line text

        canvas=Canvas(main_subframe)
        subframe=Frame(canvas)
        vbar=Scrollbar(canvas,orient=VERTICAL, command=canvas.yview)
        canvas.config(yscrollcommand=vbar.set)
        vbar.pack(side=RIGHT,fill=Y)
        canvas.pack(side=TOP,expand=True,fill=BOTH)
        canvas.create_window((4,4), window=subframe, anchor = NW, tags="frame")
        subframe.bind("<Configure>",  lambda e=Event(), c=canvas: self.update_scrollregion(e, c))

        Label(subframe, text=mytext, bg="red").pack(fill=BOTH, expand=1)

        ##------------------------------

        for i in range(5): ##some more objects to make the page bigger
            Label(main_subframe, text="This is some ending spacer text").pack(side=TOP)


        self.root.mainloop()

GUI()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...