我刚刚使用python和tkinter小部件创建了一个应用程序。
在Tk和Toplevel小部件中有标签,框架,按钮等。
但是,当我支持多种分辨率时,它包含了数千个代码并且非常讨厌调整每个小部件的大小。
有没有办法扩展现有Tkinter Tk()和Toplevel()小部件及其子窗口小部件的分辨率? (变焦式)
如果没有,那么支持具有相同比率的python应用程序的多个分辨率的最佳方法是什么?
非常感谢任何帮助,抱歉英语不好。
答案 0 :(得分:1)
是的,但这取决于您在程序中使用的几何管理器。
对于.pack()
方法(可以说是最简单的几何方法"智能" GUI设计),您可以在声明{时使用一系列属性小部件上的{1}}。这些属性包括(但不限于).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()
方法,您需要使用函数.grid()
和Grid.columnconfigure()
。这两个都具有属性Grid.rowconfigure
,如果窗口中有更多可用空间,则确定应为哪些行和列赋予优先级以分配额外空间。将所有行和列设置为weight
为1意味着它们将被均等地给予空间。在窗口小部件上声明weight
时,您还需要使用sticky
属性。
下面显示了一组三个按钮的示例,如果它改变或初始化为与开发期间使用的大小不同,它将自动展开以适合窗口。
.grid()
使用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()
往往更容易,但这一切都归结为您愿意投入多少精力来实现当前计划。
答案 1 :(得分:0)
无法发表评论,所以我在详细的Ethan答案中添加了一个简短的提示。您可以使用包,网格或两者的组合来设计tkinter中的大多数GUI(通过在其中一个窗口上放置框架,并在每个框架内使用网格或包,到&#34;放置&#34; ;小工具)。您可以在窗口调整大小时调整配置以获取正确的位置和大小。保留放置器用于特殊情况(例如将某些小部件叠加在其他顶部)