2014-02-16 131 views
1

我想调整我的GUI中的一个窗口,但我的一个框架被排除在外,我不知道为什么。窗口水平调整大小,但是当我尝试垂直调整大小时,按钮消失。这是我的第一个GUI,所以我敢肯定有我丢失的东西...Python tkinter:问题调整框架

from Tkinter import * 
from ttk import * 

class GUI(Frame): 
    def __init__(self, root): 
     Frame.__init__(self, root) 

     self.root = root 

     lbFrame = Frame(self.root) 
     nbFrame = Frame(self.root) 

     self.note = Notebook(nbFrame) 
     self.note.pack(fill=BOTH, expand=YES) 

     lbFrame.pack(side=LEFT, fill=BOTH, expand=YES) 
     nbFrame.pack(side=RIGHT, fill=BOTH, expand=YES) 

     self.make_file_viewer() 

     # Label 
     lblabel = Label(lbFrame, text='Files', background='#E8E8E8') 
     lblabel.pack(side=TOP, expand=YES, padx=10, pady=10) 

     # Listbox 
     self.lb = Listbox(lbFrame, height=49, borderwidth=0, font=('Purisa', 11), selectmode=EXTENDED) 
     self.lb.pack(side=BOTTOM, expand=YES, padx=10, pady=10) 

    def make_file_viewer(self): 
     fvwr = Frame(self.note) 

     dataFrm = Frame(fvwr) 
     btnFrm = Frame(fvwr) 
     dataFrm.pack(side=TOP, fill=BOTH, expand=YES) 
     btnFrm.pack(side=BOTTOM, fill=BOTH, expand=YES) 

     fvwr.config(borderwidth=2) 
     self.note.add(fvwr, text='File View') 

     # Label 
     self.lbl_fvwr_search = Label(dataFrm, text='Search Hits\t0', justify=LEFT) 
     self.lbl_fvwr_search.pack(side=TOP, anchor=W, expand=YES) 

     # Scrollbar 
     scrollbar_fvwr = Scrollbar(dataFrm) 
     scrollbar_fvwr.pack(side=RIGHT, fill=Y, expand=YES) 

     # Textbox 
     self.outputPanel_fvwr_text = Text(dataFrm, wrap='word', height=40, width=115, yscrollcommand=scrollbar_fvwr.set) 
     self.outputPanel_fvwr_text.pack(side=LEFT, fill=BOTH, expand=YES) 
     scrollbar_fvwr.config(command=self.outputPanel_fvwr_text.yview) 

     # Start button 
     viewBtn = Button(btnFrm, text='Start', width=8) 
     viewBtn.pack(anchor=W, expand=YES) 

if __name__ == '__main__': 
    root = Tk() 
    app = GUI(root) 
    root.mainloop() 

回答

5

你可以做的绝对最好的办法是重新开始,并一步一步的做你的布局。首先创建主要区域,并确保它们正确调整大小。在你的情况下,创建左侧和右侧。再次,让双方适当调整彼此的关系。

一旦你完成了,重点放在一个部分。既然你知道主要部分调整正确,你只需要关注该特定部分内的元素。再次,将它分解成碎片,并在处理主要碎片内的任何小部件之前使这些碎片工作。

当你这样做你的布局,它是很多更容易让整个图形用户界面工作正常,因为你没有试图一次处理六个小部件的行为。

在您的具体情况下,问题的根源在于您几乎拥有expand=YES。作为一般的经验法则,您只需要在给定的父窗口中将其设置为YES。例如,在您的主窗口中,您希望扩展权限,但不是左侧(我猜测),并且在右侧窗口中您希望文本小部件展开,而不是其他小部件。

设置为expand=NOscrollbar_fvwr,self.lbl_fvwr_searchbtnFrm以正确调整右侧的大小。对于左侧,为self.lb添加fill=BOTH,为lblabel添加expand=NONE

+0

谢谢!这真的有帮助!我喜欢你的评论,但这是我的第一个问题,我还没有名声。再次感谢 – rhowe