[英]Embedd Buttons with images and scrollbar on a frame using 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
工作原理的明确定义:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.