当窗口调整大小时,如何自动调整框架,使用网格的tkinter小部件的大小?

问题描述

我想创建一个包含一个主框架的GUI,该框架包含多个框架,每个框架包含一个或多个tkinter小部件(标签,按钮,条目等)。每个小部件都使用GRID定位。我还希望通过按窗口右上角的Windows按钮或使用鼠标来更改窗口的尺寸时,所有小部件和文本的大小都可以调整。 可能吗? 谢谢

解决方法

是的,如果您使用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未声明。我也不确定比率比较是否足以满足您的需求。因为它可能会过早更改缩放器(

如果您有任何问题,请告诉我,也许我可以帮忙。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...