簡體   English   中英

結合網格/包Tkinter

[英]Combining grid/pack Tkinter

我知道過去網格和包裝上有很多問題,但我只是不明白如何將兩者結合起來,因為我在兩個方向(行/列)上擴展我的'表'時遇到了困難。

按鈕我希望保持相同的尺寸,但始終保持在窗口的底部。 然而,我希望通過調整窗口大小自動擴展“表格”,但似乎無法使其正常工作。 將'win1'改為打包工作的意義在於它保持中心但就是這樣。

我怎么能達到相同的效果,如粘貼等包裝,因為我知道我需要更改術語。

代碼如下(顯示基本框架和幾個小部件,而不是完整的代碼):

root = Tk()  

win1 = Frame(root)
win1.pack()
win1.grid_columnconfigure(0, weight=1)
win1.grid_rowconfigure(1, weight=1)

frame_table = ttk.Frame(win1, style="Black.TLabel", relief='sunken', borderwidth=1)
frame_table.pack(row=2, column=0, padx=1, pady=1, sticky= "nsew")
frame_table.grid_columnconfigure(0, weight=1)
frame_table.grid_rowconfigure(1, weight=1)
text_table1 = Label(frame_table, text='Number1', bg='white', borderwidth=0)
text_table1.grid(row=1, column=0, sticky="nsew", padx=1, pady=1)
empty1 = Label(frame_table, bg='white', borderwidth=0)
empty1.grid(row=2, column=0, sticky="nsew", padx=1, pady=1)
text_table2 = Label(frame_table, text='Number2', bg='white', borderwidth=0, width=12)
text_table2.grid(row=1, column=1, sticky="nsew", padx=1, pady=1)
empty2 = Label(frame_table, bg='white', borderwidth=0)
empty2.grid(row=2, column=1, sticky="nsew", padx=1, pady=1)

frame_but = ttk.Frame(win1)
frame_but.grid(sticky=S, padx=1, pady=1)
frame_but.grid_columnconfigure(0, weight=1)
frame_but.grid_rowconfigure(1, weight=1)
but1 = ttk.Button(frame_but, text='Start', command=Start)
but1.grid(row=3, column=0, padx=2, pady=1, sticky="S")

你的第一個問題是主框架win1沒有選項。 默認情況下,它不會填充它所在的容器部分。因此,無論您對內部小部件做什么,整個事物都將堆疊錨定到窗口的頂部。 那么你應該做的第一件事是告訴win1填充整個窗口(假設它實際上是你想要它做的):

win1.pack(side="top", fill="both", expand=True)

當您調整窗口大小時,這將導致此框架正確擴展和縮小。

第二個問題是你在win權重為1時給第0行,但是你把第3行中的frame_table放在默認權重為0的情況下。我不知道這是否有意,但這就是保持標簽和條目小部件粘在屏幕的底部,因為win1的空行0正在擴展和縮小以占用額外的空間。

如何學習布置你的小部件

適當的調整大小行為很容易實現,但要學會如何正確實現它是相當困難的。 我的建議是,拿一些紙和一支鉛筆。 繪制應用程序的主要區域 - 每個區域具有不同的屬性。 例如,沿底部的一行應該保持在底部(狀態欄或按鈕行)。 也許頂部的東西(例如工具欄)應該保持在頂部等。通常,只有一個區域是可擴展的,盡管可擴展區域本身可以分成兩個或更多個區域。

在這種情況下,我猜你有兩個區域:一個表和一排按鈕。 搞清楚這一點很簡單。 接下來,為每個區域創建一個框架,並為每個區域創建一個框架。 為它們提供單獨的背景顏色,並使用網格或包將它們放在窗口中,無論哪個為您提供所需的調整大小行為。 如果你有一個簡單的布局(每個區域都是從上到下或從左到右),那么pack非常棒,如果你真的有一個網格,網格很棒。 使用此方法,調整選項,直到獲得主要區域所需的行為。 不同的顏色將幫助您查看哪些區域正在調整大小,哪些區域沒有。

一旦主區域正常工作,您就可以開始關注內部部分。 再次拿出鉛筆和紙,並對每個子區域做同樣的事情。 畫出內部區域,找出哪些會在容器內生長,哪些不會。 也許只有一個主要的子區域,所以你可以跳過這一部分。 最后,如果你有子區域,創建幀,再次給它們不同的顏色,這樣你就可以看到調整大小。 調整設置,直到所有內容都按照您想要的方式調整。 泡沫,沖洗,重復。

最后,您將無法再細分窗口。 通常只有幾個區域,所以這個過程很快。 一旦你的程序的不同區域都調整了你想要的大小,就可以添加實際的小部件了。 完成后,您可以返回並從框架中刪除顏色。

這很簡單,但需要有條不紊的方法。 只是將一堆小部件扔進一個框架並嘗試隨機的東西讓它工作並不是正確的方法。 要有條不紊,將您的設計布置在紙上,轉移到具有不同顏色的框架,然后添加您真實的小部件並添加最終的拋光。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM