Я написал программу для генерации нескольких экземпляров таймера игры, и в ней есть ошибка, которую я не смог исправить. Когда я нажимаю кнопку сброса, счетчик не сбрасывается. Поскольку оригинал представляет собой большую программу, я привел значительно упрощенный пример. В этом случае кнопка находится в ButtonClass, а метка отображения находится в DisplayClass, экземпляров которого может быть несколько. (Должно быть два класса, из-за другой сложной функциональности, которая работает.) Я изучил другие вопросы, связанные со связыванием классов, и это то, как далеко я его получил. Кроме того, когда я произвел вариант этого, где все было только в одном классе, он работал, как я хотел. Я подозреваю, что проблема может быть одной из областей моей переменной 'old_day', но не могу понять, как ее исправить. Может кто-то указать, как это правильно выразить. Спасибо.
'' '
from tkinter import *
from time import strftime
class ButtonClass:
def __init__(self, master):
master.geometry("500x200")
master.resizable(0, 0)
frame1 = Frame(master)
frame1.pack()
resetbutton = Button(frame1, text="Reset", font=('Courier', 10, 'bold'), relief=RAISED,
width=10, command=self.reset_counter)
resetbutton.grid(row=1, column=2)
def reset_counter(self):
print("reset_counter method")
DisplayClass.reset(self)
class DisplayClass:
def __init__(self, master, ButtonClass):
old_day = 0
self.old_day = old_day
frame2 = Frame(master)
frame2.pack()
label1 = Label(frame2, font=('Courier', 10, 'bold'), relief=RAISED, width=10, height=5)
label1.grid(row=1, column=1, padx=1, pady=1)
self.counter_label(label1)
def counter_label(self, label):
print("this is the counter_label method")
print("old day = ",self.old_day)
def counter():
print("This is counter method")
self.old_day += 1
print("old day = ",self.old_day)
string = str(self.old_day)
label.config(text=string)
label.after(2000, counter)
counter()
def reset(self):
print("this is the reset method")
#self.old_day = 0
DisplayClass.old_day = 0
def main():
root = Tk()
a = ButtonClass(root)
b = DisplayClass(root, a)
print("End")
root.mainloop()
if __name__ == '__main__':
main()