Как использовать определенные переменные в методе __init__ по всему коду? - PullRequest
0 голосов
/ 24 октября 2018

Здесь я пытаюсь создать текстовый редактор, используя python, tkinter и OOP.Но проблема в том, что я не могу использовать предопределенные переменные в коде.

from tkinter import *
from tkinter import Tk, Menu, Label, PhotoImage, StringVar, IntVar
from PIL import Image, ImageTk

PROGRAM_NAME = 'PyEdit'


class TextEditor:

    def __init__(self, root):

        self.root = root
        self.root.tk.call('wm', 'iconphoto', self.root._w, photo)
        self.root.title(PROGRAM_NAME)
        self.root.geometry('350x280')
        self.init_gui()

        self.title_image = Image.open('Text-Edit-icon.png')
        self.photo = ImageTk.PhotoImage(title_image)
        self.help = Image.open('icons/helpicon.png')
        self.new_icon = PhotoImage(file='icons/new_file.gif')
        self.save_icon = PhotoImage(file='icons/save.gif')
        self.cut_icon = PhotoImage(file='icons/cut.gif')
        self.copy_icon = PhotoImage(file='icons/copy.gif')
        self.undo_icon = PhotoImage(file='icons/undo.gif')
        self.open_icon = PhotoImage(file='icons/open_file.gif')
        self.about_icon = PhotoImage(file='icons/about.gif')
        self.redo_icon = PhotoImage(file='icons/redo.gif')
        self.find_icon = PhotoImage(file='icons/onfind.gif')
        self.help_icon = ImageTk.PhotoImage(help)
        self.paste_icon = PhotoImage(file='icons/paste.gif')

    def create_menu_bar(self):
        menu_bar = Menu(self.root)
        edit_menu = Menu(menu_bar, tearoff=0)
        edit_menu.add_command(label='Undo', accelerator='Ctrl-Z', image=self.undo_icon)
        edit_menu.add_command(label='Redo', accelerator='Ctrl-Y', image=self.redo_icon)
        edit_menu.add_command(label='Cut', accelerator='Ctrl-X', image=self.cut_icon)
        edit_menu.add_command(label='Copy', accelerator='Ctrl-C', image=self.copy_icon)
        edit_menu.add_command(label='Paste', accelerator='Ctrl-V', image=self.paste_icon)
        edit_menu.add_separator()
        edit_menu.add_command(label='Select All', accelerator='Ctrl-A', )
        menu_bar.add_cascade(label='Edit', menu=edit_menu)
        self.root.config(menu=menu_bar)

    def init_gui(self):
        self.create_menu_bar()

if __name__ == "__main__":
    root = Tk()
    TextEditor(root)
    root.mainloop()

Я получаю сообщение об ошибке:

Traceback (most recent call last):
  File "SoundBoard.py", line 51, in <module>
     TextEditor(root)
  File "SoundBoard.py", line 15, in __init__
    self.init_gui()
  File "SoundBoard.py", line 47, in init_gui
    self.create_menu_bar()
  File "SoundBoard.py", line 36, in create_menu_bar
    edit_menu.add_command(label='Undo', accelerator='Ctrl-Z', image=self.undo_icon)
AttributeError: 'TextEditor' object has no attribute 'undo_icon'

Я попытался поместить блок фотоизображения в другое место, в котором он отсутствует.т работа.Я также попробовал это в create_menu_bar, тогда нет ошибки, но она также не работает.

1 Ответ

0 голосов
/ 24 октября 2018

Я думаю, это просто потому, что вы поставили self.init_gui() перед инициализацией своих переменных, поставьте его в конце метода __init__, и он должен работать, я думаю.

...