2011-05-23 138 views
0

内部框架我试图做一个框架滚动,我发现做到这一点的唯一方法是做一个滚动的帆布和添加一帧到它。如果它对我有效,这将工作正常。创建画布

我能够创建一个可滚动的帆布工作正常,但我似乎无法适当加在其内部框架:

self.title = Label(root, text="Brnr", font=("Helvetica", 50), anchor = W, pady = 40, padx = 50) 
    self.title.pack (anchor = NW) 
    #creates title widget for title 

    self.frame = Frame(screen, bd =1) 
    self.frame.pack(fill = BOTH) 
    #Creates frame widget under which all other widgets will be kept 

    self.canvas = Canvas(self.frame, bd=1,scrollregion=(0,0, 1000, 1000), height = 600) 
    #creates canvas so that screen can be scrollable 

    self.scrollbar = Scrollbar(self.frame, command=self.canvas.yview) 
    #creates scrollbar 

    self.canvas.config(yscrollcommand=self.scrollbar.set) 
    #connects the scrollbar to the canvas 

    self.scrollbar.pack(side=RIGHT, fill=Y)      
    self.canvas.pack(expand=YES, fill=BOTH) 
    #packs the scrollbar and canvas so that they fill the remainder of the screen 


    self.frameC = Frame(bg = "red") 
    self.canvas.create_window(0,0, anchor = NW, window = self.frameC, width = 200, height = 200) 
    #creates window on the scrollable area to add other widgets 

    self.frameC.pack() 
    self.groupRec = LabelFrame(self.frameC, text ="Recommendations:", font=("Helvetica", 20)) 
    self.groupRec.pack() 
    self.signupButton = Button(self.groupRec, text="Sign Up", width=10) 
    self.signupButton.pack(side=RIGHT) 
    #creates button to submit login 

这给了我一个滚动的,但空,帆布,用没有一个labelframe /按钮出现。

回答

4

不要重新发明轮子。安装Pmw(Python meta-widgets),假设您使用的是Tkinter,http://pmw.sourceforge.net/并使用Pmw.ScrolledFrame。

5

默认情况下,当你添加一个窗口到画布上,窗口的中心将是你给的坐标。因此,帧的中心将位于画布左上角的0,0处。您无法看到小部件,因为它们位于画布边框之外。

解决方法是在create_window的调用中包含anchor="nw",该框架将将框架的左上角放置在画布的左上角。

不要忘记设置画布的滚动区域,以配合您的帧的大小。最简单的方法是使用命令self.canvas.config(scrollregion=self.canvas.bbox("all"))。您可能还需要在画布上添加一个绑定到<Configure>,以便在用户调整窗口大小时调整内部框架的大小。这并不总是必要的,它取决于你想要完成的事情。

这里有一个专业提示:以这样的调试问题是非常有帮助暂时放弃你的框架和帆布不同的颜色更容易想象发生了什么。

+0

大,感谢您的帮助!现在我遵循了你告诉我要做的事情(锚定),并没有改变任何事情。一旦我给框架添加颜色,也没有任何改变。这导致我相信它没有正确地插入到画布中?任何建议?谢谢! – 2011-05-24 23:47:20

+0

当我在你的问题中使用了确切的代码,以及你省略的几行代码,加上我建议的更改,它工作正常。你确定你的问题中的代码是_exactly_你正在使用的是什么? – 2011-05-25 01:32:22

+0

这很奇怪,所以我会在更新 – 2011-05-25 01:41:53