2012-05-11 42 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