Como criar um botão que aumenta de forma crescente o valor de uma variável com Tkinter?

Olá. Estou com problema para criar um botão com Tkinter que aumente (e diminua, quando for o caso) o valor de uma variável em uma entry de 1 em 1. Até o momento, o que consegui fazer não sobrescreve o valor passado. Ele soma com o último valor e concatena tudo.

Por exemplo: o valor começa em 0. Ao apertar no botão de “+” pela primeira vez, passa para 1. Até aí ok, porque sobrescreveu o valor anterior. Mas, ao apertar o botão de “+” pela segunda vez, ele soma 1 + 1 = 2 e concatena este resultado com o anterior: 21. Pela terceira vez, 1 + 2 = 3 e concatena: 321… E assim vai.

inserir a descrição da imagem aqui

Alguém sabe como resolver? Vou deixar abaixo um trecho do meu código.

from tkinter import *

janela = Tk()

av1 = 0
entry_av1 = Entry(janela, width = 10)
entry_av1.pack()
entry_av1.place(x = 90, y = 50)

def somar_av1():
    global av1
    av1 = av1 + 1
    entry_av1.insert(0, int(av1))

botao_mais_av1 = Button(janela, text = '+', command = somar_av1)
botao_mais_av1.place(x = 40, y = 50)

janela.mainloop()

Antes de definir um novo valor ao Entry, você precisa, fazer uso do método delete, removendo a entrada já existente, e só assim então definir uma nova. Neste caso sua função ficaria como abaixo.

...
def somar_av1():
    global av1
    av1 = av1 + 1
    entry_av1.delete(0, END)
    entry_av1.insert(0, int(av1))
...
1 curtida

Obrigado! Ajudou muito!

No tkinter, para esse caso uma boa prática seria usar:

textvariable

com o textvariable, vc altera só a variável e em vez fazer entry.insert toda hora que muda a variável


Veja também o ttkbootstrap - spinbox

https://ttkbootstrap.readthedocs.io/en/latest/styleguide/spinbox/

ou

exemplo tkinter spinbox

3 curtidas

Este tópico foi fechado automaticamente 3 dias depois da última resposta. Novas respostas não são mais permitidas.