распечатать обновленную переменную метки в главном - PullRequest
0 голосов
/ 12 октября 2018

Я хочу прочитать текущее значение переменной метки, чтобы позже отправить его на экран 8x7-Segment.Пока я печатаю его, чтобы проверить значение, я получаю только 0, а не текущее значение.

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.get()

root.mainloop()


if __name__ == '__main__':
    main()

Я думал, что это будет работать с .get (), но, похоже, это неправильно.

Ответы [ 2 ]

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

Пожалуйста, будьте осторожны, чтобы убедиться в правильности отступа при публикации кода Python.

Причина, по которой выводится 0, заключается в том, что это значение переменной при выполнении print counteraway.ca.get().Если вы напечатали значение внутри функции, которая вызывается снова, когда значение обновляется вашими кнопками, оно будет печататься правильно.

Например, если вы измените функцию _update_counter на эту:

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

Вы увидите, что оно выводит правильное значение каждый раз, когда вы нажимаете кнопку, чтобы обновить значение.

С фиксированным отступом полный код будет выглядеть примерно так:

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))
        print self.ca.get()

    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()

    root.mainloop()


if __name__ == '__main__':
    main()
0 голосов
/ 12 октября 2018

Вы выполняете counteraway.ca.get() до выполнения функции main(), поэтому переменная counteraway еще не инициализирована.И из-за этого counteraway.ca.get() не будет работать.

Если вы поставите

if __name__ == '__main__':
     main()

до

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.get()

root.mainloop()

, это, вероятно, будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...