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_reqheight
和 winfo_reqwidth
方法从 tkinter 获取它,其中 return 按钮请求的高度和宽度。然后,这只是一个数学问题。
我的例程将按钮添加到 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_reqheight
和 winfo_reqwidth
方法从 tkinter 获取它,其中 return 按钮请求的高度和宽度。然后,这只是一个数学问题。