Затем я определил метод команды кнопки внутри того же класса. Все работает отлично, но когда я пытаюсь отключить кнопки из метода конфигурации, определенного в том же классе, этот метод не распознает созданные мной переменные кнопок. У меня такое ощущение, что это потому, что они являются всего лишь переменными экземпляра и не имеют памяти вне экземпляра. Поэтому мне нужно знать, как инициализировать кнопки, а затем получить к ним доступ. Кратко посмотрите на мой код и на то, как в настоящее время настраиваются переменные, чтобы принудительно выполнять над ними действие.
Я пытался переместить их в переменная класса, но это не настраивает кнопки. Я также пробовал менять или удалять префиксы (не ожидал, что это сработает, и это не сработало). Я попробовал все, что нашел в Интернете, но застрял. (Я закомментировал параметры отключения, пока не заработаю) полный код доступен на github https://github.com/mgentile77/DnD5e.git
Код: Выделить всё
class Horde_Maker:
#Main Window class all other windows come from here
def __init__(self,root):
#Initializes the main window and starts program
self.app = root
#This sections creates window size and location on pop up
width = 300
height = 200
screen_wid = root.winfo_screenwidth()
screen_hei = root.winfo_screenheight()
x = (screen_wid/2) - (width/2)
y = (screen_hei/2) - (height/2)
self.app.title("Horde Maker")
self.app.geometry("%dx%d+%d+%d" % (width, height, x, y))
self.app.protocol("WM_DELETE_WINDOW", self.disable_Xclose)
#Begins layout of window widgets
self.set_up()
def set_up(self):
#sets up window widgets for this class
self.frame_header = ttk.Frame()#Frame for image
self.frame_header.pack()
self.frame_start = ttk.Frame()#Frame for start welcome and instructions
self.frame_start.pack()
ttk.Label(self.frame_start, text = "Welcome To The").pack()
ttk.Label(self.frame_start, text = "HORDE MAKER").pack()
ttk.Label(self.frame_start, text = "Choose Your Path").pack()
self.frame_buttons = ttk.Frame()#Frame for buttons and pops buttons
self.frame_buttons.pack()
but_horde = ttk.Button(self.frame_buttons, text = "Horde Maker", command = self.hordebutton)
but_horde.grid(row = 0, column = 0)
but_char = ttk.Button(self.frame_buttons, text = "Character Builder", command = self.characterbutton)
but_char.grid(row = 0, column = 1)
ttk.Button(self.frame_buttons, text = 'Exit', command = lambda : exit()).grid(row = 1, column = 0, columnspan = 2)
#Begins Class methods used in functions of of buttons
def hordebutton(self):#opens Horde window
self.hord_button = Horde()
# self.disable_but()
def characterbutton(self):#opens Character Window
self.char_button = Character()
# self.disable_but()
#Creates parent class instructions for other windows
def clear_frame(self,frame):#Destroys child window on exit
for widgets in frame.winfo_children():
widgets.destroy()
def disable_Xclose(self):#prevents closing the window by using corner X
pass
# @staticmethod
# def disable_but():
# but_horde.config(state = DISABLED)
# but_char.config(state = DISABLED)
# @staticmethod
# def enable_but():
# but_horde.config(state = NORMAL)
# but_char.config(state = NORMAL)
Спасибо всем за помощь. Это помогло мне обнаружить причину моей ошибки. Именно так я организовал свои занятия и попытался создать новую иерархическую цепочку. Я попытался создать свой собственный родительский класс и открыть новые окна из их собственного дочернего класса. Это означает, что я передавал объекты своим объектам, которые вызывали другие объекты для выполнения работы, и возвращал результаты моему объекту, чтобы вернуть результат другому из моих объектов. Я должен был понять, что мои классы являются дочерними классами родительского класса tk, и новые инструкции инициализации необходимо передать родительским классам tk. Как только я реорганизовал свои классы в соответствии с этой иерархией, все заработало идеально, и я получил ту функциональность, которую хотел для своей программы. Мне еще предстоит многому научиться, но я уверен, что начинаю понимать. Пожалуйста, дайте мне знать, что вы думаете об этом объяснении.
Подробнее здесь: https://stackoverflow.com/questions/762 ... t-method-b