【问题标题】:Python tkinter: issues resizing framesPython tkinter:调整框架大小的问题
【发布时间】:2014-02-16 03:46:04
【问题描述】:

我正在尝试在我的 GUI 中调整一个窗口的大小,但我的一个框架被遗漏了,我不知道为什么。窗口水平调整大小很好,但是当我尝试垂直调整大小时,带有按钮的框架消失了。这是我的第一个 GUI,所以我确定我缺少一些东西......

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()

【问题讨论】:

    标签: python resize tkinter window frame


    【解决方案1】:

    你能做的最好的事情就是重新开始,一步一步地做你的布局。首先创建主要区域,并确保它们正确调整大小。在您的情况下,创建左侧和右侧。再次,让这两个侧面相互调整大小。

    完成后,专注于一个部分。由于您知道主要部分已正确调整大小,因此您只需要关注该特定侧的元素。再次,将其分解为多个部分,并在处理主要部分中的任何小部件之前让这些部分工作。

    当您以这种方式进行布局时, 更容易让整个 GUI 正常工作,因为您不需要同时处理六个小部件的行为。

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

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

    【讨论】:

    • 谢谢!这真的很有帮助!我会赞成您的评论,但这是我的第一个问题,我还没有声誉。再次感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多