我正在用Python编写关于tkinter的教程,目前的步骤是编写这段代码:
from tkinter import *
win=Tk()
lb = Listbox(win,height=3)
lb.pack()
lb.insert(END,"first entry")
lb.insert(END,"second entry")
lb.insert(END,"third entry")
lb.insert(END,"fourth entry")
sb=Scrollbar(win,orient=VERTICAL)
sb.pack(side=LEFT,fill=Y)
显然这应该打包列表框旁边的滚动条,而是将它放在列表框下面。我在Python 2.7和Python 3.5中都尝试过这个结果。我做错了什么?
答案 0 :(得分:0)
如果您想使用pack
代替grid
,您需要一个框架来打包列表框和滚动条,如下所示:
fr = Frame(win)
lb = Listbox(fr, height=3)
lb.pack(side=LEFT, fill='both')
lb.insert(END, "first entry")
lb.insert(END, "second entry")
lb.insert(END, "third entry")
lb.insert(END, "fourth entry")
sb=Scrollbar(fr, orient=VERTICAL)
sb.pack(side=LEFT, fill=Y)
fr.grid()
或者您可以将它们格栅化为:
lb = Listbox(win, height=3)
lb.grid(row=0, column=0, sticky=(N, W, E, S))
lb.insert(END, "first entry")
lb.insert(END, "second entry")
lb.insert(END, "third entry")
lb.insert(END, "fourth entry")
sb=Scrollbar(win, orient=VERTICAL)
sb.grid(row=0, column=1, sticky=(N, S))
答案 1 :(得分:0)
pack
使用"框"隐喻。每个物体都放在盒子中可用空间的一侧。如果您没有指定一方,则默认为" top"。
当您打包列表框时,您没有指定一侧,因此tkinter将其放在顶部。想象一下,盒子没有被切成两半:上半部分有列表框,下半部分是空的。
当您打包左侧的滚动条时,它会显示在框的空白部分的左侧,这就是它出现在列表框下方的原因。
您可以通过将列表框放在左侧或右侧,然后将滚动条放在左侧或右侧来解决此问题。
Tkinter是tcl / tk的包装器。关于pack
如何工作的明确定义是在tcl / tk手册页上: