Как использовать кнопку GUI Tkinter для увеличения числа и его отображения

Я новичок в опробовании графического интерфейса python и пробовал tkinter и pyglet, но только с помощью руководств, чтобы понять основные классы и функции. Но то, что я сейчас пытаюсь сделать, это получить кнопку для увеличения числа, одновременно отображая это число. Каким-то образом, даже несмотря на то, что номер переменной был указан глобально как 0, функция для его увеличения ничего не делает, фактически выдает ошибку: «UnboundLocalError: локальная переменная «номер», на которую ссылается перед назначением». Я понятия не имею, как это исправить.

Учебники, которые я видел как на YouTube, так и в виде статьи, не говорят о том, как именно это сделать. В статье упоминается, как изменить определенный текст, но не ранее созданную переменную (в моем случае это будет «число»).

from tkinter import *
number = 0

window = Tk()
window.title("Programme")
window.geometry('350x250')

label = Label(window, text=number)
label.grid(column=0,row=0)

def clicked():
number += 1

button = Button(window, text = "Push Me", command=clicked)
button.grid(column=1, row=2)

window.mainloop()

Есть какой-либо способ сделать это? Также я искал, как добавить время, обрабатывать события и тому подобное с помощью тиков. Но все, что я нахожу в Интернете, касается буквального отображения часов в графическом интерфейсе, что бесполезно, или, по крайней мере, я не знаю, как использовать его, чтобы иметь функцию тиканья.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
2 731
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам нужно увеличить число, как и вы, но также обновить метку, чтобы отобразить новый номер:

from tkinter import *
number = 0

window = Tk()
window.title("Programme")
window.geometry('350x250')

label = Label(window, text=number)
label.grid(column=0,row=0)

def clicked():
    global number
    number += 1
    label.config(text=number)

button = Button(window, text = "Push Me", command=clicked)
button.grid(column=1, row=2)

window.mainloop()

Более простой способ сделать это — использовать версию целого числа tkinter: IntVar. Он автоматически обновляет ярлыки, но для работы с ним требуется использовать get() и set().

from tkinter import *

def clicked():
    number.set(number.get()+1)

window = Tk()
window.title("Programme")
window.geometry('350x250')
number = IntVar()

label = Label(window, textvariable=number)
label.grid(column=0,row=0)

button = Button(window, text = "Push Me", command=clicked)
button.grid(column=1, row=2)

window.mainloop()

Чувак, ты чертов гений, это полностью сработало! Спасибо брув :)

Dan 20.06.2019 01:35

Вы случайно не знаете, как добавить галочки?

Dan 20.06.2019 01:41

@ Дэн, я не знаю, что ты имеешь в виду под «тиками». Однако это звучит как несвязанный вопрос, поэтому вы должны попробовать сами и сделать новый пост, если вам нужна помощь.

Novel 20.06.2019 01:42

Вот весь мой код:

from tkinter import *

def up():
    number.set(number.get()+1)

def down():
    number.set(number.get()-1)

window = Tk()
window.title("Programme")
window.geometry('350x250')
number = IntVar()

frame = Frame(window)
frame.pack()

entry = Entry(frame, textvariable=number, justify='center')
entry.pack(side=LEFT, ipadx=15)

buttonframe = Frame(entry)
buttonframe.pack(side=RIGHT)

buttonup = Button(buttonframe, text = "▲", font = "none 5", command=up)
buttonup.pack(side=TOP)

buttondown = Button(buttonframe, text = "▼", font = "none 5", command=down)
buttondown.pack(side=BOTTOM)

window.mainloop()

Мне кажется лучше, когда кнопки находятся непосредственно внутри виджета входа.

Другие вопросы по теме