您好!
我开发了一个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)
强制屏幕大小,它仍然越来越大。
这是我在这里的第一个问题,如果我做错了什么/没有描述问题,只要告诉我并解决问题:)
谢谢!
答案 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()