глобальный вопрос (python)

#python #tkinter

#python #tkinter

Вопрос:

У меня есть код:

 from Tkinter import *
admin = Tk()
a = 1

def up():
    global a
    a  = 1

def upp():
    up()
    print a
print 'its ',a
buttton = Button(admin, text='up', command=upp)
buttton.pack()
mainloop()
  

Я хочу, чтобы значение «its» повышалось каждый раз, когда я нажимаю кнопку. таким образом, как бы воспроизводим код, чтобы его # увеличивался на единицу каждый раз … помогите

Ответ №1:

Я тестировал это:

 from Tkinter import *
import itertools

admin = Tk()
a = itertools.count(1).next


def upp():
    print a()

buttton = Button(admin, text='up', command=upp)
buttton.pack()
mainloop()
  

Это будет начинаться со значения 1, и при каждой его печати будет добавляться еще одно. Итак, при первом нажатии на него отобразится 1 в стандартном out.

Комментарии:

1. протестировал и отредактировал мой образец. Кажется, это работает так, как он просит, если я не неправильно понимаю.

2. Вы были правы, бросив мне вызов в моем решении. Я не тестировал эту идею, чтобы убедиться в ее правильности. Я относительно новичок в python, поэтому такая проверка работоспособности приветствуется.

3. Это работает не так , как я хотел . я хотел, чтобы он печатал 1 вне функции, а затем воспроизводил весь код.

Ответ №2:

Заменить

 def upp():
    up()
    print a
print 'its ',a
buttton = Button(admin, text='up', command=upp)
buttton.pack()
mainloop()
  

с

 def upp():
    up()
    print 'its ', a
buttton = Button(admin, text='up', command=upp)
buttton.pack()
mainloop()
  

и это работает так, как вы хотите.

Обновление: Обратите внимание, что вам не нужны две функции. Упрощенная версия:

 from Tkinter import *
admin = Tk()
a = 0

def upp():
    global a
    a  = 1
    print 'its ', a

buttton = Button(admin, text='up', command=upp)
buttton.pack()
mainloop()
  

в любом случае следует избегать глобальных переменных (см. Ответ Алана для лучшего решения)