繁体   English   中英

Tkinter Scrollregion在配置时增加了大小

[英]Tkinter Scrollregion bugged size on configure

我有一个带有2个滚动区域的应用程序。 第一个(主要)是包含所有内容的根窗口。 第二个(sub)位于第一个(sub)内,包含一些文本。

主滚动工作正常,但是,当我尝试滚动它时,第二个似乎试图调整自己的大小。 这会导致毛刺运动,闪烁,最后,它可能实际上停在更大的尺寸,直到它被重新配置。

我正在寻找任何代码更改或其他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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM