繁体   English   中英

滚动条无法正常运行

[英]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)

随着对标签有多大或框架有多大,你可以使用存储的知识vbarself.vbarself.vbar.pack_forget()vbar.pack()每当你需要与否的功能_On_Configure

当您为滚动框架准备好代码后,请立即发布。 我记得其他人也喜欢带有滚动条的框架。

暂无
暂无

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

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