私はTkinterを初めて使用しますが、目的のレイアウトを取得するのに問題があります。コードは次のとおりです。
import tkinter as tk
class MainFrame(tk.Frame):
def __init__(self, master, w, h):
tk.Frame.__init__(self, master, width=w, height=h)
self.toolpanel = ToolPanel(self, 200, h)
self.toolpanel.pack(side=tk.LEFT, fill=tk.Y)
class ToolPanel(tk.Frame):
def __init__(self, master, w, h):
tk.Frame.__init__(self, master, width=w, height=h, background='#000')
def main():
root = tk.Tk()
root.geometry('640x480')
mainframe = MainFrame(root, 640, 480)
mainframe.pack()
root.mainloop()
以下は、予想されるレイアウト(右)と実際のレイアウト(左)です。root
メインフレームの代わりにツールパネルのマスターを作成すると、期待どおりの出力が得られます。しかし、これは私が望んでいることではありません。メインフレームをツールパネルのマスターにする方が理にかなっていると思います。
self.toolpanel = ToolPanel(self, 200, h) # Actual result
self.toolpanel = ToolPanel(master, 200, h) # Expected (desired) result
1x1
メインフレームを作成するときに、幅と高さを渡しても、呼び出すまでそのサイズが残っていることに気付きましたpack()
。Tkinterアプリケーションをより適切に整理するにはどうすればよいですか?また、どのようにして目的の結果を得ることができますか?
class MainFrame(tk.Frame):
def __init__(self, master, w, h):
tk.Frame.__init__(self, master, width=w, height=h)
# At this point, the size is still 1x1
# ...