【发布时间】:2020-08-12 22:34:55
【问题描述】:
我想创建一个由主 Frame 组成的 GUI,该主 Frame 包含多个 Frame,每个 Frame 包含一个或多个 tkinter 小部件(标签、按钮、条目...)。每个小部件都使用 GRID 定位。我还希望当我通过按下窗口右上角的窗口按钮或使用鼠标更改窗口的尺寸时,所有小部件和文本都会调整大小。 可能吗? 谢谢
【问题讨论】:
标签: tkinter grid python-3.7 autoresize
我想创建一个由主 Frame 组成的 GUI,该主 Frame 包含多个 Frame,每个 Frame 包含一个或多个 tkinter 小部件(标签、按钮、条目...)。每个小部件都使用 GRID 定位。我还希望当我通过按下窗口右上角的窗口按钮或使用鼠标更改窗口的尺寸时,所有小部件和文本都会调整大小。 可能吗? 谢谢
【问题讨论】:
标签: tkinter grid python-3.7 autoresize
是的,如果您使用grid() 方法,尽管小部件大小是自动完成的。您必须更改小部件上的字体大小。为了让您的字体根据您的窗口调整大小,您可能需要有点棘手。您可以在如下事件中使用简单的 if 语句来获得不同的大小。
window = Tk()
def on_resize(self,event):
w_height = window.winfo_height()
w_width = window.winfo_width()
if(w_height > 500 and w_width > 600):
a_label.configure(font=("Helvetica", "16")
else:
a_label.configure(font=("Helvetica", "14")
window.bind(<Configure>, on_resize)
您还可以根据最初对窗口进行编程的内容创建比例。
programmed_height = 1080
programmed_width = 1920
programmed_font = 16
window = Tk()
def on_resize(self,event):
w_height = window.winfo_height()
w_width = window.winfo_width()
if(w_width/w_height > programmed_width/programmed_height): # compare ratio
scaler = w_height / programmed_height
else:
scaler = w_width / programmed_width
font_size = programmed_font * scaler
font_tuple = ("Helvetica", str(int(font_size))) # int() should truncate any decimal points. You could also use round() if you prefer
window.bind(<Configure>, on_resize)
这段代码是抽象的,所以事情不一定正确a_label 没有声明例如。我也不确定比率比较是否足以满足您的需求。因为它可能会过早更改缩放器(
如果您有任何问题,请告诉我,也许我可以提供帮助。
【讨论】: