Напишите переменную класса в метке в главном - PullRequest
0 голосов
/ 11 октября 2018

Я хочу записать переменную класса в метку, которую я создал в своей основной записи, но я не могу получить обновленное значение.Может быть, кто-то может мне помочь, потому что у меня закончились идеи.

from Tkinter import *

class CounterAway(Frame):
    def __init__(self, parent=None, **kw):        
        Frame.__init__(self, parent, kw)
        self.countera = 0
        self.ca = 0
        self._update_counter()

def _update_counter(self):
    self.ca = self.countera       

def count_up(self):
    self.countera += 1
    if self.countera > 99 : self.countera = 0
    self._update_counter()

def count_down(self):
    self.countera -= 1
    if self.countera < 0 : self.countera = 0
    self._update_counter()

def main():
    root = Tk()
    w, h = root.winfo_screenwidth(), root.winfo_screenheight()  
    """root.geometry("%dx%d+0+0" % (w, h))"""
    root.geometry('1000x1000')  
    counteraway = CounterAway(root)



Button(root, font=('Arial',30), width=10, text='Away +', command=counteraway.count_up).place(x=450, y=300)   
Button(root, font=('Arial',30), width=10, text='Away -', command=counteraway.count_down).place(x=450, y=370)
Button(root, width=10, font=('Arial',30), text='Quit', command=root.destroy).place(x=10, y=10)
counteraway.label = Label(root, font="Arial 100 bold", fg="RED", text=str(counteraway.ca)).pack()

print(counteraway.ca)

root.mainloop()

if __name__ == '__main__':
    main()

Большое спасибо заранее за любую помощь.

br KlaRo

1 Ответ

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

Вы определяете root внутри main (), а затем пытаетесь использовать его вне этой функции, что будет означать, что код сгенерирует исключение.Также кажется, что отступ для определенного класса неправильный, если вы измените код на следующий, он должен запускаться:

from Tkinter import *

class CounterAway(Frame):
    def __init__(self, parent=None, **kw):        
        Frame.__init__(self, parent, kw)
        self.countera = 0
        self.ca = 0
        self._update_counter()

    def _update_counter(self):
        self.ca = self.countera       

    def count_up(self):
        self.countera += 1
        if self.countera > 99 : self.countera = 0
        self._update_counter()

    def count_down(self):
        self.countera -= 1
        if self.countera < 0 : self.countera = 0
        self._update_counter()


def main():
    root = Tk()
    w, h = root.winfo_screenwidth(), root.winfo_screenheight()  
    """root.geometry("%dx%d+0+0" % (w, h))"""
    root.geometry('1000x1000')  
    counteraway = CounterAway(root)

    Button(root, font=('Arial',30), width=10, text='Away +', command=counteraway.count_up).place(x=450, y=300)   
    Button(root, font=('Arial',30), width=10, text='Away -', command=counteraway.count_down).place(x=450, y=370)
    Button(root, width=10, font=('Arial',30), text='Quit', command=root.destroy).place(x=10, y=10)
    counteraway.label = Label(root, font="Arial 100 bold", fg="RED", text=str(counteraway.ca)).pack()

    print(counteraway.ca)

    root.mainloop()


if __name__ == '__main__':
    main()

Если вы хотите обновить текст в метке, вы должны заглянуть в TkinterПеременные, например, Tkinter StringVar.Код будет выглядеть примерно так:

from Tkinter import *

class CounterAway(Frame):
    def __init__(self, parent=None, **kw):        
        Frame.__init__(self, parent, kw)
        self.countera = 0
        self.ca = StringVar()
        self._update_counter()

    def _update_counter(self):
        self.ca.set(str(self.countera))       

    def count_up(self):
        self.countera += 1
        if self.countera > 99 : self.countera = 0
        self._update_counter()

    def count_down(self):
        self.countera -= 1
        if self.countera < 0 : self.countera = 0
        self._update_counter()

def main():
    root = Tk()
    w, h = root.winfo_screenwidth(), root.winfo_screenheight()  
    """root.geometry("%dx%d+0+0" % (w, h))"""
    root.geometry('1000x1000')  
    counteraway = CounterAway(root)

    Button(root, font=('Arial',30), width=10, text='Away +', command=counteraway.count_up).place(x=450, y=300)   
    Button(root, font=('Arial',30), width=10, text='Away -', command=counteraway.count_down).place(x=450, y=370)
    Button(root, width=10, font=('Arial',30), text='Quit', command=root.destroy).place(x=10, y=10)
    counteraway_label = Label(root, font="Arial 100 bold", fg="RED", textvariable=counteraway.ca).pack()

    print(counteraway.ca)

    root.mainloop()


if __name__ == '__main__':
    main()
...