我写一个程序运行于不同的服务器批处理文件,到目前为止,一切都进展良好。 我指的是节目的工作,并使用一个简单的GUI,一切都很好。 除了当我给它一个稍长的名字在列表框中它剪辑年底关闭显示。 那Tkinter的使用的代码如下。
master = tk.Tk()
listbox = tk.Listbox(master, selectmode=tk.SINGLE)
keys = serverDict.keys()
for key in sorted(keys):
listbox.insert(tk.END, key)
button = tk.Button(master, text="Execute", command=execute)
listbox.pack()
button.pack()
tk.mainloop()
所以基本上它的所有工作完全正常,我没有得到任何错误,但它是一个有点讨厌它无法正确适合的方式,我不能滚动。 我知道我可以添加滚动条,使窗口重新相当大,使列表框适合它给予足够的空间,但我想它,而不必调整的东西工作。 我知道这是不是那么重要,但它只是那种我喜欢工作,但无法弄清楚的一件事情:/。
重置为我工作列表框的宽度。 我用遗忘的回答,发现宽度始终为零。
listbox = tk.Listbox(master, selectmode=tk.SINGLE)
listbox.config(width=0)
我还建议重装列表中的内容后,根窗口几何复位。 否则,如果用户手动地延伸的窗口的窗口将停止适应其内容的大小。
root.winfo_toplevel().wm_geometry("")
这是基于关闭遗忘的答案,但我编辑它,所以它为我工作。
我提出,是基于关闭原来的一个新的列表框类,但有一个新的功能,我从遗忘的代码了。 然后我调用这个函数,它使列表框的适当的大小。
class Listbox(tk.Listbox):
def autowidth(self,maxwidth):
f = font.Font(font=self.cget("font"))
pixels = 0
for item in self.get(0, "end"):
pixels = max(pixels, f.measure(item))
# bump listbox size until all entries fit
pixels = pixels + 10
width = int(self.cget("width"))
for w in range(0, maxwidth+1, 5):
if self.winfo_reqwidth() >= pixels:
break
self.config(width=width+w)
master = tk.Tk()
listbox = Listbox(master, selectmode=tk.SINGLE)
keys = serverDict.keys()
for key in sorted(keys):
listbox.insert(tk.END, key)
button = tk.Button(master, text="Execute", command=execute)
listbox.autowidth(250)
listbox.pack()
button.pack()
tk.mainloop()
tkListAutoWidth.py显示了如何做这件事:
http://svn.effbot.org/public/stuff/sandbox/tkinter/
编辑:
所以,你可能会沿着线的东西,
import tkinter as tk
from tkinter import font
class NewListbox(tk.Listbox):
def autowidth(self, maxwidth=100)
autowidth(self, maxwidth)
def autowidth(list, maxwidth=100):
f = font.Font(font=list.cget("font"))
pixels = 0
for item in list.get(0, "end"):
pixels = max(pixels, f.measure(item))
# bump listbox size until all entries fit
pixels = pixels + 10
width = int(list.cget("width"))
for w in range(0, maxwidth+1, 5):
if list.winfo_reqwidth() >= pixels:
break
list.config(width=width+w)
if __name__ == "__main__":
master = tk.Tk()
listbox = NewListbox(master, selectmode=tk.SINGLE)
# ...
# ...
keys = serverDict.keys()
for key in sorted(keys):
listbox.insert("end", key)
listbox.pack()
button = tk.Button(master, text="Execute", command=execute)
button.pack()
listbox.autowidth()
master.mainloop()
只要给宽度和高度0,如下
listbox.config(width=0,height=0)