滚动条使用tkinter和Python出现在错误的位置

时间:2016-04-25 21:17:03

标签: python-2.7 user-interface python-3.x tkinter scrollbar

我正在用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中都尝试过这个结果。我做错了什么?

2 个答案:

答案 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手册页上:

https://www.tcl.tk/man/tcl/TkCmd/pack.htm#M26