繁体   English   中英

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

[英]Scrollbar appearing in the wrong spot using tkinter and Python

我正在用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中尝试了相同的结果。 我究竟做错了什么?

如果要使用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))

pack使用“盒子”的隐喻。 每个对象都放在盒子中可用空间的一侧。 如果您未指定侧面,则默认为“顶部”。

打包列表框时,您没有指定面,所以tkinter将其放在顶部。 想象一下,该框还没有切成两半:上半部分有列表框,下半部分是空的。

当您将滚动条放在左侧时,它位于框的空白部分的左侧,这就是为什么它出现在列表框下方的原因。

您可以通过将列表框放在左侧或右侧,然后将滚动条放在左侧或右侧来解决此问题。

Tkinter是tcl / tk的包装。 在tcl / tk手册页上有关于pack工作原理的明确定义:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM