调整tkinter窗口和内容的大小

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调整tkinter窗口和内容的大小相关的知识,希望对你有一定的参考价值。

我正在使用python tkinter来构建一个包含matplotlib图形和一些按钮的ui,但是在调整窗口及其内容的大小时遇到​​了困难。我看了本网站和文档上的一些示例,据我了解,对于包含较小框架以重新调整大小的框架,它们都需要单独配置。每个对象都会获得一个权重,以定义它接收多少可用空间(这是正确的吗?)。但是,当我尝试如下图所示应用此框架时,不会调整任何框架的大小。另外,如果对于列配置,wiegth为零,对于行配置,wiegth为1,这是否意味着它将仅在一个方向上调整大小?]

import Tkinter
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
class Application():
    def __init__(self, master):


        frame2 = Tkinter.Frame(master, height=510, width=770, bg='red')
        frame2.grid(row=0, column=0, sticky='nsew')
        frame2.columnconfigure(0, weight=1)
        frame2.rowconfigure(0, weight=1)

        frame2a = Tkinter.Frame(frame2, height=80, width=770, bg='blue') 
        frame2a.grid(row=0, column=0, sticky='nsew')
        frame2a.columnconfigure(0, weight=1)
        frame2a.rowconfigure(0, weight=1)        

        frame2b = Tkinter.Frame(frame2, height=410, width=770, bg='green') 
        frame2b.grid(row=1, column= 0, sticky='nsew')
        frame2b.columnconfigure(0, weight=1)
        frame2b.rowconfigure(1, weight=1)    

        # add plot
        fig = Figure(figsize=(9.5,5.2), facecolor='white')
        fig.add_subplot(111)        
        canvas = FigureCanvasTkAgg(fig, master=frame2b)

        canvas.show()
        canvas.get_tk_widget().pack(side='top', fill='both', expand=1)

if __name__ == '__main__' :

    root = Tkinter.Tk()
    root.geometry("770x510")
    app = Application(root)
    root.mainloop()
答案

您使用columnconfigurerowconfigure的方法是正确的,但是您忘记了一件事:您尚未使用master窗口上的方法。因此,您基本上想这样做:

def __init__(self, master):
    master.columnconfigure(0, weight=1)
    master.rowconfigure(0, weight=1)

要回答您的其他问题(此外,如果columnconfigure的wiegth为零,row configure的wiegth为1,是否意味着它只会在一个方向上调整大小?):是的,您是对的,小部件/窗口会然后仅向一个或一个方向延伸。

此外,由于您正在使用grid进行动态调整大小,因此heightwidth参数已过时。

另一答案

rowconfigure需要应用于容器,而不是所包含的对象。您有frame 2,其中包含frame2aframe2b。因此,与frame2.rowconfigure(0, weight=1)一起赋予第0行(即frame2a)权重为1时,您需要添加frame2.rowconfigure(1, weight=1)来对另一行进行均等权重。另一方面,格式为frame2[ab].[row|column]configure(...)的四行代码是多余的。

以上是关于调整tkinter窗口和内容的大小的主要内容,如果未能解决你的问题,请参考以下文章

如何使 Tkinter 窗口无法调整大小?

在 Tkinter 中使用 Pyautogui 进行自动化时,窗口会调整大小并放错位置

tkinter笔记002-防止窗口大小调整

在 MS-Windows 下调整大小导致的 Tkinter 性能问题

当使用Tkinter的包布局时,如何在调整窗口大小时使Label的强度等于窗口的宽度?

如何在 tkinter 中创建一个自调整大小的按钮网格?