调整Tkinter窗口大小并动态调整窗口内容

时间:2020-08-07 08:49:26

标签: python python-3.x tkinter

是否可以使tkinter窗口的内容适应屏幕尺寸?就像是否根据1366x768的屏幕分辨率创建了一个窗口,然后在1024x768分辨率的系统上运行相同的代码并动态调整其内容大小一样?我知道我可以在此处使用as described作为网格结构,并相应地设置单元的权重。但是包装几何结构而不是网格有可能吗?我问这个问题是因为我正在从事的项目的一半是由我的同事完成的,而他根本没有使用网格。因此,我正在寻找一种解决方法,而不是在网格中重做所有代码。这是我需要调整大小的示例代码-

def check_variable(jar_path):
    with zipfile.ZipFile(jar_path, 'r') as zipf:
        ret_reader = csv.reader(zipf)
        for row in ret_reader:
            if row[0] == 'Variable Label':
                return row[1]
    raise OutputError('Variable Label not found in file %s!' % ret_file_name)

您会看到所有小部件都使用包几何管理器放置了。

1 个答案:

答案 0 :(得分:2)

packgrid可以达到几乎相同的效果。确实,我通常喜欢打包,因为它给了我更多的自由。

例如,以以下示例为例:

from tkinter import Tk, Label, X, Frame, Y, LEFT, BOTH

root = Tk()

# Initialize frames
f1 = Frame(root, bg="grey")
f2 = Frame(root, bg="pink")

# Initialize labels
w1 = Label(f1, text="Red", bg="red", fg="white")
w2 = Label(f1, text="Green", bg="green", fg="white")
w3 = Label(f1, text="Blue", bg="blue", fg="white")
w1b = Label(f2, text="Red", bg="red", fg="white")
w2b = Label(f2, text="Green", bg="green", fg="white")
w3b = Label(f2, text="Blue", bg="blue", fg="white")

# Packing level 1
f1.pack(fill=X)
f2.pack(fill=BOTH, expand=True)

# Packing level 2
w1.pack(fill=X)
w2.pack(fill=X)
w3.pack(fill=X)
w1b.pack(side=LEFT, fill=BOTH, expand=True)
w2b.pack(side=LEFT, fill=BOTH, expand=True)
w3b.pack(side=LEFT, fill=BOTH, expand=True)

root.mainloop()

enter image description here

如您所见,通过以正确的方式使用参数fillexpand,我将第二帧设置为可扩展,并带有两侧的窗口(XY),而第一帧只能在X中展开。框架内的所有标签也均匀分布。

请参阅文档https://effbot.org/tkinterbook/pack.htm中的pack的所有选项。