1

画布对我来说不适用于 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()

窗口和菜单有效,但画布无效。

4

1 回答 1

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)
于 2013-11-03T02:59:29.680 回答