Как я могу исправить эту ошибку __init__ self.init_window () - PullRequest
0 голосов
/ 18 октября 2019

Я начал настраивать свой графический интерфейс с помощью pyCharm, но я столкнулся с некоторыми ошибками при компиляции, начиная с добавления строки меню.

Я удалил весь код, относящийся к строке меню, и он работаетно это не помогает, поскольку я хотел бы добавить строку меню.

from tkinter import *

class Window(Frame):

        def __init__(self, master = None) :
            Frame.__init__(self, master)

            self.master = master
            self.init_window()

        def init_window(self) :

            self.master.title("GUI")
            self.pack(fill=BOTH, expand=1)

            #quitButton = Button(self, text="Quit", command=self.client_exit)
            #quitButton.place(x=0, y=0)

            menu = Menu(self.master)
            self.master.config(menu=menu)

            file = Menu(menu)
            file.add_command(label='Exit', command=self.client_exit)
            menu.add_cascade(label='File', menu=file)

            edit = Menu(menu)
            edit.add_command(label='Undo')
            menu.add_command(label='Edit', menu=edit)




        def client_exit(self) :
            exit()


root = Tk()
root.geometry("400x350")

app = Window(root)

1 Ответ

1 голос
/ 18 октября 2019

Во-первых, вам нужно передать menu в другую функцию для создания строки меню. Во-вторых, используйте эту новую переменную вместо menu и используйте add_cascad e вместо add_command. Убедитесь, что add_cascade добавляет правильный пункт меню.

from tkinter import *

class Window(Frame):

    def __init__(self, master = None) :
        Frame.__init__(self, master)
        self.master = master
        self.init_window()

    def init_window(self) :
        self.master.title("GUI")
        self.pack(fill=BOTH, expand=1)
        # quitButton = Button(self, text="Quit", command=self.client_exit)
        # quitButton.place(x=0, y=0)
        menu = Menu(self.master)
        # add a new variable called menubar 
        menubar = Menu(menu)
        # pass 'menubar' into your root's config instead of 'menu'
        self.master.config(menu=menubar)
        filemenu = Menu(menubar, tearoff=0)
        filemenu.add_command(label="Exit", command=self.client_exit)
        # call add_cascade on menubar, and pass your filemenu as the menu param
        menubar.add_cascade(label="File", menu=filemenu)
        edit = Menu(menubar, tearoff=0)
        edit.add_command(label="Undo")
        # Again, add_cascade from your menubar.
        menubar.add_cascade(label="Edit", menu=edit)


    def client_exit(self) :
        exit()

root = Tk()
root.geometry("400x350")
app = Window(root)
root.mainloop()
...