python Tkinter:如何禁止 window 大于屏幕尺寸

python Tkinter: how to disallow a window growing bigger than screen size

我的例程将按钮添加到 tkinter 中的 window。在某些时候 window 变得比我的实际屏幕大(高度),我无法再访问底部的按钮。

演示代码:

from Tkinter import *

n_buttons = 20 # <- change this as you wish for testing the code

def generate_buttons(n):

    for i in range(n):
        button = Button(myframe, text="Button Clone", height=4)
        button.grid(row=i)

root = Tk()
myframe = Frame(root)
myframe.pack()

generate_buttons(n=n_buttons)

root.mainloop()

作为第一次尝试,我将以下代码放入我的循环中:

if root.winfo_height() > root.winfo_screenheight():
    print("I'm full!")
    break

但是 1) 它不起作用,并且 2) 我强烈希望有一个解决方案来检查 window 是否可以在创建 之前使用另一个按钮 ,这样我以后就不必销毁它了。

在我的真实代码中,按钮被放置为二维网格,我对 window 过载的第一反应是增加框架中的列数,然后降低框架的高度所有按钮。同样,如果我必须重新生成所有按钮直到满足所有要求,那就太糟糕了。如果您能帮助我提供一个解决方案,在创建第一个按钮之前检查几何是否可行,那就太好了。谢谢!

很难知道一个小部件是否适合,因为变量太多了。例如,填充、边距、屏幕上的其他小部件等

话虽这么说,但由于您了解自己的应用程序,因此可以说明这一点。唯一缺少的是知道按钮的高度。您可以使用 winfo_reqheightwinfo_reqwidth 方法从 tkinter 获取它,其中 return 按钮请求的高度和宽度。然后,这只是一个数学问题。