将Scrollbar放在Canvas上的Frame上

时间:2014-03-16 11:00:31

标签: python python-2.7 canvas tkinter scrollbar

我是Python和Tkinter的新手。

我正在练习使用Frames,Canvas和Scrollbars,我遇到了一个问题:

我有一个Canvas作为我的主人,一个框架位于Canvas的特定坐标上。

我会在框架中放置按钮和标签,所以我选择不使用列表框。

现在,如何在框架上创建滚动条,以便框架中的标签超过5(每个标签以垂直方式放置),然后会出现ScrollBar?

以下是示例代码:

from Tkinter import *

class GUI():
    def __init__(self):
        self.namelist = ["Mark","Anna","Jason","Lenna","Leo","Zucharich","Robinson","AReallyLongNameThatMightExist"]
        self.canvas = Canvas(width=1200,height=700)
        self.canvas.pack(expand=YES,fill=BOTH)
    def Friends(self):        
        controlframe = Frame(self.canvas)
        controlframe.place(x=600,y=300)
        #Frame for showing names of friends
        for x in self.namelist:
            frame = Frame(controlframe)
            frame.pack()
            Name = Label(frame,text="%s "%x).pack(side=LEFT)
            chatButton = Button(frame,text="Chat").pack(side=LEFT)
            delButton = Button(frame,text="Delete").pack(side=LEFT)
            setcloseButton = Button(frame,text="Set Close").pack(side=LEFT)
            setgroupButton = Button(frame,text="Set Group").pack(side=LEFT)
        mainloop()

GUI = GUI()
GUI.Friends()

1 个答案:

答案 0 :(得分:1)

您无法滚动Frame,但可以滚动画布。务必将画布的滚动区域设置为框架区域。然后,您可以添加pack()的滚动条,并将其隐藏pack_forget()

也许你绑定到"配置"当大小改变时你会知道框架的事件。