我正在使用python tkinter来构建一个包含matplotlib图形和一些按钮的ui,但是在调整窗口大小及其内容时遇到了困难。我已经查看了本网站和文档中的一些示例,据我了解,对于包含较小帧的帧来调整大小,它们都需要单独配置。每个人都会获得一个权重来定义它收到多少可用空间(这是正确的吗?)。但是,当我尝试如下所示应用它时,没有任何帧调整大小。 此外,如果列配置的wiegth为零,而行配置的1则表示它只会在一个方向上调整大小?
import Tkinter
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
class Application():
def __init__(self, master):
frame2 = Tkinter.Frame(master, height=510, width=770, bg='red')
frame2.grid(row=0, column=0, sticky='nsew')
frame2.columnconfigure(0, weight=1)
frame2.rowconfigure(0, weight=1)
frame2a = Tkinter.Frame(frame2, height=80, width=770, bg='blue')
frame2a.grid(row=0, column=0, sticky='nsew')
frame2a.columnconfigure(0, weight=1)
frame2a.rowconfigure(0, weight=1)
frame2b = Tkinter.Frame(frame2, height=410, width=770, bg='green')
frame2b.grid(row=1, column= 0, sticky='nsew')
frame2b.columnconfigure(0, weight=1)
frame2b.rowconfigure(1, weight=1)
# add plot
fig = Figure(figsize=(9.5,5.2), facecolor='white')
fig.add_subplot(111)
canvas = FigureCanvasTkAgg(fig, master=frame2b)
canvas.show()
canvas.get_tk_widget().pack(side='top', fill='both', expand=1)
if __name__ == '__main__' :
root = Tkinter.Tk()
root.geometry("770x510")
app = Application(root)
root.mainloop()
答案 0 :(得分:1)
使用columnconfigure
和rowconfigure
的方法是正确的,但您忘记了一件事:您尚未使用主窗口中的方法。所以,你基本上想要这样做:
def __init__(self, master):
master.columnconfigure(0, weight=1)
master.rowconfigure(0, weight=1)
回答你的另一个问题(如果列配置的wiegth为零,而行配置为1则意味着它只会向一个方向调整大小?):是的,你是对的,窗口小部件/窗口只会在一个方向或无方向上延伸。
此外,由于您使用grid
进行动态调整大小,height
和width
参数已过时。
答案 1 :(得分:0)
rowconfigure
需要应用于容器,而不是所包含的对象。您有frame 2
,其中包含frame2a
和frame2b
。因此,与frame2.rowconfigure(0, weight=1)
一起赋予第0行(即frame2a
)权重为1的情况下,您需要添加frame2.rowconfigure(1, weight=1)
来平均加权另一行。另一方面,frame2[ab].[row|column]configure(...)
形式的四行代码是多余的。