Я изучаю tkiner python из справочника. Примеры закодированы в обычном стиле, т. е. не в формате класса. Я хочу изучать программирование на занятиях, потому что считаю, что это помогает справляться с длинными кодами.
Я пытаюсь сделать текстовый виджет (с именем textPad
) доступным для вспомогательной функции внутри класса с именем TextEditor
. Работа вспомогательной функции состоит в том, чтобы выделить весь текст, который я печатаю. Однако, как только я запускаю скрипт, я получаю глобальную ошибку, что the textPad is not defined
. Даже когда я добавляю self.
к textPad
, то есть self.textPad
, я получаю ошибку атрибута, что Class object has no attribute textPad.
Код является частью упражнения по созданию полнофункционального текстового редактора. Ниже я привожу основной код, который генерирует ошибку. Что не так с этим кодом?
Не могли бы вы развеять мои сомнения: где лучше всего определять вспомогательные функции: внутри класса или вне класса? В обоих случаях, как сделать их доступными?
from tkinter import *
class TextEditor():
def __init__(self, root):
self.select_all() #helper function declare
myMenu = Menu(root, tearoff=0) #Menu bar
editMenu = Menu(root, tearoff)
editMenu.add_command(label="Select All", accelerator="Ctrl+A", command=select_all)
myMenu.add_cascade(label="Edit", menu=editMenu)
root.config(menu=myMenu)
textPad = Text(root, wrap="word", undo=True)
textPad.pack(expand="yes", fill="both")
def select_all(self):
textPad.tag_add('sel', '1.0', 'end')
if __name__ == '__main__':
root=Tk()
app = TextEditor(root)
root.mainloop()
Это ошибка:
Traceback (most recent call last):
File "C:\Python33\gui\tkguibook\textpad.py", line 21, in <module>
app = TextEditor(root)
File "C:\Python33\gui\tkguibook\textpad.py", line 6, in __init__
self.select_all() #helper function declare
File "C:\Python33\gui\tkguibook\textpad.py", line 17, in select_all
textPad.tag_add('sel', '1.0', 'end')
NameError: global name 'textPad' is not defined
Заранее благодарим вас за вашу любезную помощь!