2012-05-11 20 views
0
def initUI(self): 
    self.columnconfigure(5, weight=1) 
    self.rowconfigure(3, weight=1) 
    self.search_label = Label(self, text='Keyword:') 
    self.search_label.grid(row=0, column=0, padx=5) 

    self.keywords = StringVar() 
    self.search_bar = Entry(self, width=30,textvariable=self.keywords) 
    self.search_bar.grid(row=0, column=1) 

    self.search_button = Button(self, text="Search", 
          command=self.handler_search) 
    self.search_button.grid(row=0, column=3, padx=5) 
    self.pack(fill=BOTH)#, expand='yes') 
    #self.pack(fill=BOTH) 
    self.box = Text(self, state='disabled') 
    self.box.grid(row=1, column=0) 

UI由三個子框架組成,文本編輯器爲一個,側面按鈕形成在另一個框架內,搜索位於另一個框架內。上面的代碼片段是用於搜索的UI。如何使TextBox正確放置在Tkinter的搜索條目下?

見截圖:http://i.imgur.com/Vip1t.png

我希望把一個文本框是搜索框,這是搜索條目下的一部分。我希望它儘可能地擴展底部區域。我試過展開,填充等,但它不能解決入口被拉伸的問題,並且我的文本框被切斷(我以前添加了滾動條,但它也被切斷了)。

問題在哪裏?謝謝。

回答

1

給自己找一張方格紙並畫出你的GUI。問題應該變得明顯。

你把進入小部件在第1列,文本組件在第0列,我不能完全肯定的您正在尋找的效果,但你可以移動文本組件到第1列,或將其在第0列中,並跨越幾列。

假設您希望文本小部件是標籤 - 輸入 - 按鈕組合的整個寬度,並且您希望標籤小部件只有它所需的大小,我將停止使用網格並開始使用包裝對於GUI的這一部分,通過執行以下操作:

  1. 爲該區域創建一個框架;如果您希望它不可見,您可以將它的邊框寬度設置爲零
  2. 爲條目窗口小部件,標籤和搜索按鈕創建一個內部框架。它包到頂部,填充= X
  3. 創建文本窗口小部件,它包的底部,填=兩者,展開=真
  4. 創建標籤,包裝它在所述內框架的左側
  5. 創建搜索按鈕,收拾它內部框架
  6. 創建條目小部件的右側,包它的內框的左側,補= X,擴大=真

這會給你一個自我 - 包含適當大小行爲的megawidget,您可以將其放置在主應用程序中的任何位置。

分段製造的圖形用戶界面,並自由使用內部框架來實現你所追求的外觀和行爲,並使用幾何管理器,是適合每個部分。如果你需要一個網格對齊的東西,使用網格。如果你不需要一個真正的網格,但你有獨立的行或列,使用包。包擅長將東西放置在行或列中。網格擅長在網格中排列事物。爲工作選擇合適的工具。

+0

謝謝布萊恩。同時,爲什麼把第1列放錯了?該行雖然不同。 – CppLearner

+0

@cpplearner:也許我誤解了你想要的東西,但看起來你想要一個文本小部件頂部的條目。要做到這一點,他們需要佔用同一列。如果文本只在列0中,並且條目在列1中,則它們不能排隊。 –

+0

謝謝布萊恩。這是有幫助的! – CppLearner