【问题标题】:Dynamically resize all widgets on a tkinter window as the window resizes随着窗口调整大小,动态调整 tkinter 窗口上的所有小部件的大小
【发布时间】:2020-12-07 09:14:10
【问题描述】:

我正在尝试制作一个 tkinter 应用程序(我的第一个真正的代码),但我在界面上遇到了一点问题。我想让我的小部件在窗口调整大小时动态调整大小。我通过编写一个调整 PIL 图像大小的函数,设法使我的背景图像调整自身大小以适应整个窗口大小,因为用户调整了窗口大小。这是函数:

    def resizeimage(self,event) :
        width, height = self.winfo_width(), self.winfo_height()
        image = self.bg_image.resize((width,height))
        self.image1 = ImageTk.PhotoImage(image)
        self.bg_label.config(image = self.image1)

我已将此函数绑定到显示背景图像的标签,如下所示:

        self.bg_image = Image.open("project_pics\\start_pg.png")
        bg_image = ImageTk.PhotoImage(self.bg_image)
        self.bg_label = Label(self,image=bg_image)
        self.bg_label.image = bg_image
        self.bg_label.bind('<Configure>',self.resizeimage)
        self.bg_label.grid(sticky="nwse")

这里,self.bg_image 是要显示为背景的图像,self.bg_label 是显示图像的标签。我编写此代码来调整背景图像大小的原因是,当我在另一台计算机上运行我的应用程序时,由于新计算机具有不同的屏幕尺寸,因此背景图像不适合我想要的屏幕尺寸喜欢它。这个功能解决了这个问题,但后来我注意到了一个新问题。 屏幕上的其他小部件保持相同大小。因此,当窗口缩小时,您可以看到所有小部件保持相同大小,只是在较小的屏幕上聚集在一起。我知道我可以编写一些类似于resizeimage() 的函数来调整所有其他小部件的大小,使其与窗口成比例并类似于背景图像,将屏幕上的所有小部件绑定到这样的函数,但它看起来很乏味而且不是很高效的。我正在寻找更动态的解决方案。 这是窗口的正常外观:

这是缩小窗口时的样子:

我的问题是这样的。 有什么办法可以动态调整窗口上所有小部件的大小,这样它们就不会像图 2 中那样聚在一起,而是按窗口的比例调整自己的大小,这样缩小时它们看起来就像图 1,只是更小了? 我认为here 提出了类似的问题,但给出的解决方案并没有完全回答整个问题。

【问题讨论】:

    标签: python python-3.x tkinter


    【解决方案1】:

    我前段时间做了类似的事情,根据标签大小调整字体大小,这并不繁琐,可以适应调整多个标签。

    def resize(event):
        # Adjust font according to Label size
        h, w = display.winfo_height(), display.winfo_width()
        if h/w > 183/605:           # Label text h/w ratio is 183/605
            h = int(w*183/605)
        label_font.config(size=h)
    

    display 是标签小部件的名称。 label_font 是一个 tkinter.font 对象。然后我简单地将函数绑定到&lt;Configure&gt;。此外,文本始终是相同数量的字符。

    你认为这可能有用吗?

    【讨论】:

    • 不完全是我想要的,但我可以尝试从您的解决方案中找出一些东西。但我认为当窗口调整大小并且小部件随之调整大小时,我必须使用这样的东西来调整按钮和标签的字体。谢谢你的回答:)
    猜你喜欢
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 2018-03-01
    • 2018-11-30
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多