Python-Tkinter-从角落调整窗口大小时,滚动条会自动移动

时间:2018-10-22 19:08:26

标签: python user-interface tkinter tkinter-canvas

我的以下代码有一个奇怪的问题。如果用户运行此代码,并且他们做的第一件事(甚至在单击窗口之前)是在右下角调整窗口大小,那么滚动条将自动向下移动,而不是像往常一样停留在原地期待。

import tkinter as tk


def onResize(event):
    """Prints the scrollbar's position on window resize."""
    print(str(myScrollbar.get()))


root = tk.Tk()
myFrame = tk.Frame(root)
mySecondaryFrame = tk.Frame(root)
myCanvas = tk.Canvas(myFrame)
myScrollbar = tk.Scrollbar(myFrame, orient='vertical', command=myCanvas.yview)

myCanvas.config(yscrollcommand=myScrollbar.set)

for i in range(0,100):
    print(i)
    button = tk.Button(mySecondaryFrame, text=i)
    button.pack(fill='y',expand=True)
    myCanvas.configure(scrollregion=(0, 0, 0, 3000))

myFrame.pack(fill='both',expand=True)
myScrollbar.pack(side="right",fill='y')
myCanvas.pack(side='right', fill='both', expand=True)

button_window = myCanvas.create_window(0, 0, anchor='nw', window=mySecondaryFrame)

myCanvas.bind('<Configure>', onResize)

tk.mainloop()

在我花时间在这里寻找解决方案而不必发表文章的时候,我遇到了滚动条的.get()方法,想知道这是否可以帮助我查明问题,因此放置在代码中。奇怪的是,当出现故障时,我从打印语句中注意到滚动条正在进行微小的水平移动。考虑到滚动条设置为画布的y视图,为什么会这样呢?我不确定这是否是关联!=因果关系的情况,但我认为值得一提。可以提供的任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

好吧,这很令人尴尬-注释部分促使我在Mac的Notes系统上测试了此问题-确实发生了同样的事情。看来这只是Mac的滚动条系统的一个奇怪之处,Tkinter从中退出了它的滚动条。感谢上面的用户!希望这个问题能对以后发现这种行为很奇怪的其他人有所帮助。