Tkinter窗口改变大小是因为列表框中的项目

时间:2014-10-15 00:25:52

标签: python listbox tkinter window

您好!

我开发了一个GUI到我制作的简单python脚本(使用SpecTcl开发的GUI)。 该脚本正在搜索网站并在列表框中显示搜索结果。

代码是:

results = search(query) #return a list of results, or False if there are no results
msg = msgMngr()
if results == False:
    msg.onWarn("No results", "No search results to " + query) #Warn the user that there are no results
else: 
    self.list.delete(0, END) #clear listbox
    for item in results: #enter all items to the listbox
        self.list.insert(END, item) 

为了证明这个问题,我制作了一个简单的程序,将程序添加到“hello world!”列表中。每次用户点击按钮时:http://i.imgur.com/FuTtrOl.png

但是,当项目数量多于列表大小容量时,它会变大:http://i.imgur.com/f9atci5.png

如果物品太长,它也会水平地开心:i.imgur.com/a88DRxy.png

我想要做的是:窗口将始终保持原始大小,如果项目太多或项目长度太高,则会有2个滚动条。

我尝试添加滚动条,但它没有帮助。 我还尝试使用root.resizable(0,0)强制屏幕大小,它仍然越来越大。

这是我在这里的第一个问题,如果我做错了什么/没有描述问题,只要告诉我并解决问题:)

谢谢!

1 个答案:

答案 0 :(得分:2)

您所描述的不是tk列表框小部件的默认行为。以下示例显示了带滚动条的列表框:

import Tkinter as tk

class Example(tk.Frame):
    def __init__(self, parent):
        tk.Frame.__init__(self, parent, borderwidth=1, relief="sunken")
        b = tk.Button(self, text="search", command=self.add_one)

        self.lb = tk.Listbox(self, borderwidth=0)
        self.lb.pack(fill="both", expand=True)
        vsb = tk.Scrollbar(self, orient="vertical", command=self.lb.yview)
        hsb = tk.Scrollbar(self, orient="horizontal", command=self.lb.xview)
        self.lb.configure(yscrollcommand=vsb.set, xscrollcommand=hsb.set)

        b.grid(row=0, column=0, columnspan=2)
        vsb.grid(row=1, column=1, sticky="ns")
        self.lb.grid(row=1, column=0, sticky="nsew")
        hsb.grid(row=2, column=0, sticky="ew")
        self.grid_rowconfigure(1, weight=1)
        self.grid_columnconfigure(0, weight=1)

    def add_one(self):
        self.lb.insert("end", "hello world!")

if __name__ == "__main__":
    root = tk.Tk()
    Example(root).pack(fill="both", expand=True)
    root.mainloop()