如何设置框架的最小和最大高度或宽度?
我们可以通过以下方法来控制Tkinter窗口的大小:
.minsize()
.maxsize()
.resizable()
有没有类似的方法可以控制Tkinter或ttk框架的大小呢?
@Bryan: 我把你的frame1.pack代码改成了这样:
frame1.pack(fill='both', expand=True)
frame1.bind( '<Configure>', maxsize )
我还添加了这个事件处理器:
# attempt to prevent frame from growing past a certain size
def maxsize( event=None ):
print frame1.winfo_width()
if frame1.winfo_width() > 200:
print 'frame1 wider than 200 pixels'
frame1.pack_propagate(0)
frame1.config( width=200 )
return 'break'
上面的事件处理器可以检测到框架的宽度太大,但却无法阻止它变大的情况。这是Tkinter的限制,还是我对你的解释理解错了呢?
3 个回答
1
# this code works for me
import tkinter as tk
class tk(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.pack()
window = tk()
window.master.title("window")
window.master.minsize(100, 100)
window.master.maxsize(300, 300)
window.mainloop()
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
8
有一个解决办法——至少对于最小尺寸来说:你可以使用网格布局来管理根窗口中的框架,并通过设置sticky='nsew'让它们跟随网格的大小。然后,你可以使用root.grid_rowconfigure和root.grid_columnconfigure来设置最小尺寸的值,像这样:
from tkinter import Frame, Tk
class MyApp():
def __init__(self):
self.root = Tk()
self.my_frame_red = Frame(self.root, bg='red')
self.my_frame_red.grid(row=0, column=0, sticky='nsew')
self.my_frame_blue = Frame(self.root, bg='blue')
self.my_frame_blue.grid(row=0, column=1, sticky='nsew')
self.root.grid_rowconfigure(0, minsize=200, weight=1)
self.root.grid_columnconfigure(0, minsize=200, weight=1)
self.root.grid_columnconfigure(1, weight=1)
self.root.mainloop()
if __name__ == '__main__':
app = MyApp()
不过正如布莱恩在2010年提到的 :D,如果你不限制最小尺寸,窗口还是可以调整得比框架小。
39
没有一种神奇的函数可以强制一个框架(窗口)保持最小或固定的大小。不过,你可以通过给这个框架设置宽度和高度来强制它的大小。接下来,你可能还需要做两件事:第一,当你把这个窗口放进一个容器时,要确保几何管理器(负责布局的部分)不会让这个窗口变小或变大。第二,如果这个框架是用来放其他小部件的,要关闭网格或打包的传播功能,这样框架就不会因为里面的内容而变小或变大。
不过要注意,这样做并不能阻止你把窗口调整得比内部框架还小。在这种情况下,框架的内容会被裁剪掉。
import Tkinter as tk
root = tk.Tk()
frame1 = tk.Frame(root, width=100, height=100, background="bisque")
frame2 = tk.Frame(root, width=50, height = 50, background="#b22222")
frame1.pack(fill=None, expand=False)
frame2.place(relx=.5, rely=.5, anchor="c")
root.mainloop()