[英]Scrollbar not functioning properly Tkinter
我是Python的新手。
我正在尝试创建一个滚动条,但我做不到,但滚动条无法正常运行。
该框架已经显示了所有标签,但是我希望框架最多只能显示5个标签
如果框架包含5个以上的标签,则滚动条将显示未看见的剩余标签。
有什么帮助吗?
码:
from Tkinter import *
class GUI():
def __init__(self):
root=Tk()
frame=Frame(root,width=300,height=300)
frame.grid(row=0,column=0)
self.canvas=Canvas(frame,bg='#FFFFFF',width=300,height=300,scrollregion=(0,0,500,500))
Label(self.canvas,text="1").pack()
Label(self.canvas,text="2").pack()
Label(self.canvas,text="3").pack()
Label(self.canvas,text="4").pack()
Label(self.canvas,text="5").pack()
Label(self.canvas,text="6").pack()
Label(self.canvas,text="1").pack()
Label(self.canvas,text="2").pack()
Label(self.canvas,text="3").pack()
Label(self.canvas,text="4").pack()
Label(self.canvas,text="5").pack()
Label(self.canvas,text="6").pack()
hbar=Scrollbar(frame,orient=HORIZONTAL)
hbar.pack(side=BOTTOM,fill=X)
hbar.config(command=self.canvas.xview)
vbar=Scrollbar(frame,orient=VERTICAL)
vbar.pack(side=RIGHT,fill=Y)
self.canvas.bind('<Configure>',self._On_Configure())
vbar.config(command=self.canvas.yview)
self.canvas.config(width=300,height=300)
self.canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set)
self.canvas.pack(side=LEFT,expand=True,fill=BOTH)
root.mainloop()
def _On_Configure(self):
self.canvas.configure(scrollregion=self.canvas.bbox('all'))
GUI = GUI()
我不会为您实现它。 以下是您可能感兴趣的一些方法:
from Tkinter import *
class GUI():
def __init__(self):
root=Tk()
frame=Frame(root,width=300,height=300)
frame.grid(row=0,column=0)
self.canvas=Canvas(frame,bg='#FFFFFF',width=300,height=300,scrollregion=(0,0,500,500))
self.canvas_frame = Frame(self.canvas)
self.canvas.create_window(0,0, anchor = NW, window = self.canvas_frame)
self.labels = []
for i in range(10):
label = Label(self.canvas_frame,text=str(i))
label.pack()
self.labels.append(label)
hbar=Scrollbar(frame,orient=HORIZONTAL)
hbar.pack(side=BOTTOM,fill=X)
hbar.config(command=self.canvas.xview)
vbar=Scrollbar(frame,orient=VERTICAL)
vbar.pack(side=RIGHT,fill=Y)
self.canvas.bind('<Configure>',self._On_Configure) # MISTAKE! do not use () here
vbar.config(command=self.canvas.yview)
self.canvas.config(width=300,height=300)
self.canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set)
self.canvas.pack(side=LEFT,expand=True,fill=BOTH)
root.mainloop()
def _On_Configure(self, event = None):
print self.canvas.bbox(self.canvas_frame)
for label in self.labels:
print label.winfo_pointerxy(), label.winfo_rootx(), label.winfo_rooty(), label.winfo_height(), label.winfo_reqheight()
print "canvas:", self.canvas.winfo_height(), self.canvas.winfo_pointerxy()
self.canvas.configure(scrollregion=self.canvas.bbox(self.canvas_frame))
GUI = GUI()
输出显示标签和其他像素填充的位置。
None
(664, 607) 0 0 21 21
(664, 607) 0 21 21 21
(664, 607) 0 42 21 21
(664, 607) 0 63 21 21
(664, 607) 0 84 21 21
(664, 607) 0 105 21 21
(664, 607) 0 126 21 21
(664, 607) 0 147 21 21
(664, 607) 0 168 21 21
(664, 607) 0 189 21 21
canvas: 304 (664, 607)
随着对标签有多大或框架有多大,你可以使用存储的知识vbar
在self.vbar
做self.vbar.pack_forget()
或vbar.pack()
每当你需要与否的功能_On_Configure
。
当您为滚动框架准备好代码后,请立即发布。 我记得其他人也喜欢带有滚动条的框架。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.