2013-11-02 179 views
1

画布不适合我tkinter工作,我有菜单工作,也顶层窗口,但不是帆布。这是我的例子:Python tkinter,画布不显示

class Interface(Frame): 
    def __init__(self, master=None): 
     self.__loadSettings() 
     Frame.__init__(self,master) 
     self.m=Menu(self) 
     menu = Menu(self.m, tearoff=0) 
     self.m.add_cascade(label="File", menu=menu) 
     menu.add_command(label="New", command=self.__newGame) 
     menu = Menu(self.m, tearoff=0) 
     self.m.add_cascade(label="Edit", menu=menu) 
     menu.add_command(label="Settings", command=self.__settings) 
     self.master.config(menu=self.m) 
     self.canvas= Canvas(self,height=500, width=500) 
     self.canvas.create_rectangle(100,100,400,400, fill="blue") 

root = Tk() 
ui = Interface(root) 
ui.mainloop() 

的窗口和菜单的作品,而不是在画布上。

+0

此代码不能像发布一样工作。如果您发布实际工作代码,人们将能够更好地帮助您。上面的代码缺少一个导入语句,并且还引用了几个不存在的类方法。帮助我们通过发布工作代码来帮助你。 –

回答

1

第一个问题是,您将画布放在一个框架(Interface的实例)中,但是您从未使该框架可见。由于这个框架的设计是整个UI(我假设),你可以这样做:

root = Tk() 
ui = Interface(root) 
ui.pack(side="top", fill="both", expand=True) 
ui.mainloop() 

请注意,我所说的pack对象ui上。

这只能解决问题的一半。第二个问题是,您没有在其父项中显示画布。您可以使用pack,gridplace。这里我用pack

self.canvas.pack(side="top", fill="both", expand=True) 

你似乎有第三个问题,以及 - 你正在创建一个菜单,但你不使其可见,无论是。在菜单栏的情况下,您通常会将其作为根窗口的menu属性的值。在你的情况下,你可能想要做这样的事情:

self.master.configure(menu=self.m)