Python—有没有办法扩展现有Tkinter Tk()和Toplevel()小部件的分辨率?(放大)

Python—有没有办法扩展现有Tkinter Tk()和Toplevel()小部件的分辨率?(放大),python,tkinter,Python,Tkinter,我刚刚用python和tkinter小部件制作了一个应用程序。 Tk和顶级小部件中有标签、框架、按钮等。 然而,它包含数千个代码,当我支持多分辨率时,调整每个小部件的大小真的很烦人。 有没有办法扩展现有Tkinter Tk()和Toplevel()小部件及其子小部件的分辨率?(放大) 如果不是,那么支持一个具有相同比率的python应用程序的多个分辨率的最佳方法是什么? 非常感谢您的帮助,抱歉英语不好。是的,这是可能的,但这取决于您在程序中使用的几何管理器 对于.pack()方法(这可以说是“

我刚刚用python和tkinter小部件制作了一个应用程序。
Tk和顶级小部件中有标签、框架、按钮等。
然而,它包含数千个代码,当我支持多分辨率时,调整每个小部件的大小真的很烦人。

有没有办法扩展现有Tkinter Tk()和Toplevel()小部件及其子小部件的分辨率?(放大)

如果不是,那么支持一个具有相同比率的python应用程序的多个分辨率的最佳方法是什么?


非常感谢您的帮助,抱歉英语不好。

是的,这是可能的,但这取决于您在程序中使用的几何管理器


对于
.pack()
方法(这可以说是“智能”GUI设计中最简单的几何方法),当您在小部件上声明
.pack()
时,可以在上使用一系列属性。这些属性包括(但不限于)
fill
expand
anchor
padx
pady

下面显示了一组三个按钮的示例,如果窗口更改或初始化为与开发过程中使用的不同的大小,这些按钮将自动展开以适应窗口

from tkinter import *

root = Tk()

btn1 = Button(root, text="btn1")
btn2 = Button(root, text="btn2")
btn3 = Button(root, text="btn3")

btn1.pack(fill="both", expand=True)
btn2.pack(fill="both", expand=True)
btn3.pack(fill="both", expand=True)

root.mainloop()
from tkinter import *

root = Tk()

for column in range(3):
    Grid.columnconfigure(root, column, weight=1)

for row in range(1):
    Grid.rowconfigure(root, row, weight=1)

btn1 = Button(root, text="btn1")
btn2 = Button(root, text="btn2")
btn3 = Button(root, text="btn3")

btn1.grid(column=0, row=0, sticky=N+S+E+W)
btn2.grid(column=1, row=0, sticky=N+S+E+W)
btn3.grid(column=2, row=0, sticky=N+S+E+W)

root.mainloop()

对于
.grid()
方法,您需要使用函数
grid.columnconfigure()
grid.rowconfigure
。这两个属性都具有属性
weight
,该属性确定在窗口中有更多可用空间时,哪些行和列应优先分配额外空间。将所有行和列的
权重设置为1意味着所有行和列都将获得相等的空间。在小部件上声明
.grid()
时,还需要使用
sticky
属性

下面显示了一组三个按钮的示例,如果窗口更改或初始化为与开发过程中使用的不同的大小,这些按钮将自动展开以适应窗口

from tkinter import *

root = Tk()

btn1 = Button(root, text="btn1")
btn2 = Button(root, text="btn2")
btn3 = Button(root, text="btn3")

btn1.pack(fill="both", expand=True)
btn2.pack(fill="both", expand=True)
btn3.pack(fill="both", expand=True)

root.mainloop()
from tkinter import *

root = Tk()

for column in range(3):
    Grid.columnconfigure(root, column, weight=1)

for row in range(1):
    Grid.rowconfigure(root, row, weight=1)

btn1 = Button(root, text="btn1")
btn2 = Button(root, text="btn2")
btn3 = Button(root, text="btn3")

btn1.grid(column=0, row=0, sticky=N+S+E+W)
btn2.grid(column=1, row=0, sticky=N+S+E+W)
btn3.grid(column=2, row=0, sticky=N+S+E+W)

root.mainloop()

使用
.place()
要困难得多,您需要有一个函数设置,在每次窗口调整大小事件时触发该设置,该设置将计算按钮需要扩展到的大小

这将类似于以下内容:

from tkinter import *

class App:
    def __init__(self, root):
        self.root = root
        self.button = Button(self.root, text="Button")
        self.button.place(relx=0.5, rely=0.5, anchor="center")
        self.root.bind("<Configure>", self.resize)
    def resize(self, *args):
        self.button.configure(width=self.root.winfo_width(), height=self.root.winfo_height())

root = Tk()
App(root)
root.mainloop()
从tkinter导入*
类应用程序:
定义初始化(自,根):
self.root=根
self.button=按钮(self.root,text=“button”)
self.button.place(relx=0.5,rely=0.5,anchor=“center”)
self.root.bind(“,self.resize)
def调整大小(自身,*参数):
self.button.configure(width=self.root.winfo_width(),height=self.root.winfo_height())
root=Tk()
应用程序(根)
root.mainloop()


从主观上讲,
.pack()
似乎更容易,但这一切都取决于您愿意在当前程序中投入多少精力来实现这一点。

无法发表评论,因此我在详细的Ethan回答中添加了一个小提示。您可以使用pack、grid或两者的组合来设计tkinter中的大多数gui(通过将框架放置在具有其中一个的窗口上,并在每个框架内部使用grid或pack来“放置”小部件)。调整窗口大小时,您可以调整配置以获得适当的位置和大小。将placer用于特殊情况(如将某些小部件覆盖在其他小部件上)