我正在尝试在列表框旁边放置一个滚动条。注意:我正在使用place()方法,因为某些原因我必须坚持使用它。我知道如何用grid()和pack()来做。但是我无法用place()实现同样的目标。
here is the part of my code:
data = Listbox(root, width=33, height=15,bg='grey',fg='black')
data.place(x=381,y=158)
# create a vertical scrollbar to the right of the data
yscroll = Scrollbar(command=data.yview, orient=VERTICAL)
#......this is causing trouble...........
yscroll.place(x=580,y=158)
#..........................................
data.configure(yscrollcommand=yscroll.set)
#data.bind('<<ListboxSelect>>',openDoc)
#test function for listbox
def populate():
for i in range(1,50):
data.insert('end','number is: '+str(i))
我需要进行哪些修改以便滚动条扩展?
答案 0 :(得分:2)
使用grid
或pack
几乎总会产生一个更容易维护的GUI,并且在面对变化时更具弹性(不同的字体,不同的分辨率,调整大小的窗口)。最简单的解决方案是使用框架,将右侧的滚动条和左侧的列表框打包,然后您可以将整个框架+列表框+滚动条视为GUI其余部分中的单个窗口小部件。这是一种非常常见的技术。
但是,如果您坚持使用place
并且仅使用place
,并希望它在列表框旁边,则最佳选择是使用相对和绝对定位的组合。
通过相对定位,您可以告诉“把它放在这个其他小部件旁边”,而不必担心自己的确切坐标。您还可以告诉地点使窗口小部件与其他窗口小部件一样高(或宽),或者恰好是另一个窗口小部件的一小部分。在您的情况下,您希望滚动条与列表框完全一样高。
以下是一个完整的工作示例,它基于您的代码构建:
from Tkinter import *
root = Tk()
root.geometry("800x800")
data = Listbox(root, width=33, height=15,bg='grey',fg='black')
data.place(x=381,y=158)
# create a vertical scrollbar to the right of the data
yscroll = Scrollbar(command=data.yview, orient=VERTICAL)
yscroll.place(relx=1.0, y=0.0, relheight=1.0,
bordermode="outside", in_=data)
data.configure(yscrollcommand=yscroll.set)
#data.bind('<<ListboxSelect>>',openDoc)
#test function for listbox
def populate():
for i in range(1,50):
data.insert('end','number is: '+str(i))
populate()
root.mainloop()
答案 1 :(得分:0)
首先,平滑处理调整大小是几何管理器 pack 和 grid 的主要目标之一。建议不要在同一容器中混合使用 pack 和 grid ,但其中一个可以在 place 中工作,并且通常混合不同的几何管理器通过中间框架实现。对于您的确切示例:使用place
在根目录中创建Listbox
,然后在此框架中,使用包或网格创建Scrollbar
和height
。
如果坚持使用 place ,place
会接受一个可选的参数名称height
,强制小部件达到给定的高度。至于要提供的值,您可以等待显示列表框以访问其像素高度(Listbox
构造函数中提供的<Configure>
在行中)。每次更改窗口小部件显示参数时都会引发def updateYScrollPosition(*event):
yscroll.place(
x=data.winfo_x() + data.winfo_width(),
y=data.winfo_y(),
height=data.winfo_height())
data.bind("<Configure>", updateYScrollPosition)
事件,等等也会在第一次绘图时引发。
$sudo port install opencv
$export PYTHONPATH=/Users/swiftguy/anaconda/lib/python2.7/site-packages:$PYTHONPATH