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