2017-09-29 83 views
1

我在坐在另一個包含按鈕的框架頂部的框架內有一個樹形視圖。當我調整窗口大小時,我希望頂部框架展開,但保持按鈕框架不變。垂直展開一個控件,同時用Tkinter/ttk鎖定另一個控件

代碼在Python 2.7.5:

class MyWindow(Tk.Toplevel, object): 
     def __init__(self, master=None, other_stuff=None): 
     super(MyWindow, self).__init__(master) 
     self.other_stuff = other_stuff 
     self.master = master 
     self.resizable(True, True) 
     self.grid_columnconfigure(0, weight=1) 
     self.grid_rowconfigure(0, weight=1) 

     # Top Frame 
     top_frame = ttk.Frame(self) 
     top_frame.grid(row=0, column=0, sticky=Tk.NSEW) 
     top_frame.grid_columnconfigure(0, weight=1) 
     top_frame.grid_rowconfigure(0, weight=1) 
     top_frame.grid_rowconfigure(1, weight=1) 

     # Treeview 
     self.tree = ttk.Treeview(top_frame, columns=('Value')) 
     self.tree.grid(row=0, column=0, sticky=Tk.NSEW) 
     self.tree.column("Value", width=100, anchor=Tk.CENTER) 
     self.tree.heading("#0", text="Name") 
     self.tree.heading("Value", text="Value") 

     # Button Frame 
     button_frame = ttk.Frame(self) 
     button_frame.grid(row=1, column=0, sticky=Tk.NSEW) 
     button_frame.grid_columnconfigure(0, weight=1) 
     button_frame.grid_rowconfigure(0, weight=1) 

     # Send Button 
     send_button = ttk.Button(button_frame, text="Send", 
     command=self.on_send) 
     send_button.grid(row=1, column=0, sticky=Tk.SW) 
     send_button.grid_columnconfigure(0, weight=1) 

     # Close Button 
     close_button = ttk.Button(button_frame, text="Close", 
     command=self.on_close) 
     close_button.grid(row=1, column=0, sticky=Tk.SE) 
     close_button.grid_columnconfigure(0, weight=1) 

我做實例其他地方是這樣的:

window = MyWindow(master=self, other_stuff=self._other_stuff) 

我曾嘗試: 試圖鎖定可調整大小,只發按鈕消失。我也嘗試過改變權重,但我目前的配置是屏幕上顯示的所有內容的唯一方式。

它應該永遠是什麼樣子,不管多久高度: When it first launches

我想什麼來防止:提前 enter image description here

感謝。

回答

3

問題不在於按鈕框架在不斷增長,而在於頂部框架正在增加,但並未使用所有空間。這是因爲您給予top_frame的第1行的權重爲1,但不要將任何內容放入第1行。由於其重量,額外空間正在分配給第1行,但第1行是空的。

一個簡單的可視化方法是將top_frame更改爲tk(而不是ttk)幀,並暫時爲其提供獨特的背景色。你會發現當你調整窗口的大小時,top_frame作爲一個整體填滿整個窗口,但它部分是空的。

創建top_frame這樣的:

top_frame = Tk.Frame(self, background="pink") 

...產生像下面的圖像的畫面,當你調整窗口的大小。請注意,粉紅色top_frame正在顯示,並且button_frame仍然是其首選尺寸。

screenshot showing colored empty space

您可以通過簡單地去除這一行代碼解決這個問題:

top_frame.grid_rowconfigure(1, weight=1) 
+1

你不能有任何更好的解釋。現在我對網格有了更好的理解,以及它如何工作,謝謝! – vaponteblizzard

相關問題