對於這個簡單的佈局,你可以使用grid
,pack
或兩者。在這種特殊情況下也沒有明顯的優勢。兩者都有你想要的調整行爲。
關閉我的頭頂我會用一個水平框架來保存按鈕,並在其中包裝按鈕。然後,我可能會使用網格將工具欄,文本窗口小部件和滾動條放入框架中。包也可以使用,要麼工作。這需要照顧右側。
如果你想讓菜單欄在圖片中顯示(例如:非標準菜單,只能在棋盤上),我會使用類似的技術:左邊的另一個框架,菜單欄放在頂部,棋盤在底部。
然後,我會在主窗口中使用包,狀態欄在底部,棋盤在左邊,然後右邊的文本區域。
然而,最好是使用標準的菜單欄,這意味着你不需要包含幀的棋盤/菜單欄組合
這裏是在一個解決方案中使用標準的菜單欄的快速破解。這使用了將大多數小部件作爲父項的子項的技術,然後使用參數in_
將它們放入容器中。這樣可以稍後更改佈局,因爲您不必更改整個層次結構,而只需將容器部件放置在容器中。
import Tkinter as tk
import random
class App(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
size = 40
menubar = tk.Menu(self)
menubar.add_cascade(label="Game")
menubar.add_cascade(label="Options")
menubar.add_cascade(label="Help")
chessboard = tk.Canvas(width=8*size, height=8*size, borderwidth = 0,
highlightthickness=0)
statusbar = tk.Label(self, borderwidth=1, relief="sunken")
right_panel = tk.Frame(self, borderwidth = 1, relief="sunken")
scrollbar = tk.Scrollbar(orient="vertical", borderwidth=1)
# N.B. height is irrelevant; it will be as high as it needs to be
text = tk.Text(background="white",width=40, height=1, borderwidth=0, yscrollcommand=scrollbar.set)
scrollbar.config(command=text.yview)
toolbar = tk.Frame(self)
for i in range(10):
b = tk.Button(self, text="B%s" % i, borderwidth=1)
b.pack(in_=toolbar, side="left")
self.config(menu=menubar)
statusbar.pack(side="bottom", fill="x")
chessboard.pack(side="left", fill="both", expand=False)
toolbar.grid(in_=right_panel, row=0, column=0, sticky="ew")
right_panel.pack(side="right", fill="both", expand=True)
text.grid(in_=right_panel, row=1, column=0, sticky="nsew")
scrollbar.grid(in_=right_panel, row=1, column=1, sticky="ns")
right_panel.grid_rowconfigure(1, weight=1)
right_panel.grid_columnconfigure(0, weight=1)
if __name__ == "__main__":
app = App()
app.mainloop()
網格佈局具有所有的相同的放大/縮小行爲的包,只是訪問不同(給行和/或列的「權重」) – 2011-01-24 22:19:34
你的屏幕截圖顯示的是非標準菜單欄,它_not_跨越一路延伸。這是一個要求,還是標準的菜單欄好嗎? – 2011-01-24 22:20:52