область видимости переменной при использовании двух классов - PullRequest
0 голосов
/ 21 января 2020

Я написал программу для генерации нескольких экземпляров таймера игры, и в ней есть ошибка, которую я не смог исправить. Когда я нажимаю кнопку сброса, счетчик не сбрасывается. Поскольку оригинал представляет собой большую программу, я привел значительно упрощенный пример. В этом случае кнопка находится в 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...