2016-01-15 130 views
0

我正在工作n具有滚动框架的项目。它可以让我为框架添加小部件,但我无法滚动框架并显示其余的小部件。我已将我的代码与其他可滚动的框架进行在线比较,但我无法注意到它们之间的差异。任何人都能看到解决方案。可滚动框架Python Tkinter

代码:

from Tkinter import * 
import ttk 
import os 

class GUI(Frame): 
    def __init__(self, parent): 
     Frame.__init__(self,parent) 
     self.pack(fill=BOTH, expand=YES) 

    def gameView(self): 
     self.mainFrame = Frame(self) 
     self.mainFrame.pack(side=TOP) 

     self.scroller = ttk.Scrollbar(self.mainFrame, orient=VERTICAL) 
     self.scroller.pack(side=RIGHT, fill=Y) 

     self.canvas = Canvas(self.mainFrame, bd=0) 
     self.canvas.pack(fill=BOTH, side=LEFT) 

     self.viewArea = Frame(self.canvas, bg="Pink") 
     self.viewArea.pack(side=TOP, fill=BOTH) 

     self.canvas.config(yscrollcommand=self.scroller.set) 
     self.scroller.config(command=self.canvas.yview) 
     self.canvas.create_window((0,0), window=self.viewArea, anchor=NW, width=783, height=650) 

     self.viewArea.bind("<Configure>", self.scrollCom) 

     self.itemHolder = Frame(self.viewArea, bg="Pink") 
     self.itemHolder.pack(side=TOP) 

     self.gameGather() 

    def scrollCom(self, event): 
     self.canvas.config(scrollregion=self.canvas.bbox("all"), width=783, height=650) 

    def gameGather(self): 
     for i in range(0, 50): 
      label = Label(self.viewArea, text="Pie") 
      label.pack(side=TOP) 

root = Tk() 
root.title("School Vortex 2.0") 
root.geometry("800x650") 
root.resizable(0,0) 

gui = GUI(root) 
gui.gameView() 

root.mainloop() 
+0

如果您创建了[MCVE](http://www.stackoverflow.com/help/mcve),它将有所帮助。例如,PIL真的需要重现这个问题吗?菜单栏是必需的吗? –

+0

@BryanOakley是的,菜单栏和图像是需要的,因为它们在滚动区域内。我使用PIL作为图像。 –

+0

但是,重现问题的必要图像?如果删除图像并插入文字标签,问题是否仍然出现?如果删除菜单,问题是否仍然出现?难道你不能简单地创建一个循环来为调试这个问题添加一堆标签或按钮到框架中吗?另外,什么是'GameData'? –

回答

0

当你把你明确地给它的高度和宽度在画布上的窗口。因此,帧的实际宽度和高度完全被忽略。由于框架几乎完全是画布的高度,因此无需滚动。

如果您将widthheight选项从呼叫中移除到create_window,则您的框架将可滚动。

+0

这工作,但现在在画布上画的东西看起来像他们正在滚动条下。这是我在框架中的形象 –