Python Forum
[Tkinter] Make my button text update?
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Tkinter] Make my button text update?
#1
So i have an integer 'bankValue' that is increased by a function 'addToBank'.

The buttons text displays 'bankValue', and should update upon click, but doesn't.


from tkinter import *
import tkinter.messagebox as mb
import os

# the in-game bank value, your total 'currency'
bankValue = 0

# function that decides how much to add to bankValue
def addToBank(amount):
    global bankValue
    bankValue += amount

# "gameWindow" = tk interface
gameWindow = Tk()

# heightxwidth of interface
gameWindow.geometry("500x250")

# title on top bar
gameWindow.title("WTFIT v0.05")

# button click = bankValue + amount (amount can be changed)
button1 = Button(gameWindow, command=addToBank(1), text=bankValue, width = 10, height = 2, bg = 'cyan')

# placement of button
button1.place(x=100, y=25)

# shows whats happening
gameWindow.mainloop()
I want the button to increase the value of 'bankValue', and display it as well.
I don't need it to display on the button either, if I can have that number display anywhere that would be awesome.


Thank you!
- Skata100
Reply
#2
The easiest way to do this is make bankValue a StringVar or IntVar. In this example I make it a StringVar so I can format it to have two decimal places.
import tkinter as tk

def addToBank(amount):
    balance = float(bankValue.get()) + amount
    bankValue .set(f'{balance:.2f}')

gameWindow = tk.Tk()
bankValue = tk.StringVar()
bankValue.set('0.00')
button1 = tk.Button(gameWindow, command=lambda:addToBank(1.25), textvariable=bankValue)
button1.pack()

gameWindow.mainloop()
This code sets your callback function to None.
command=addToBank(1)
command is None because addToBank(1) calls the function and uses the return value (None) and the value for command. You probably wanted this:
command=addToBank
But this does not provide an argument for "amount" in addToBank(). You could get around this by providing a default value for amount.
def addToBank(amount=1.25):
    balance = float(bankValue.get()) + amount
    bankValue .set(f'{balance:.2f}')
You can also use a lambda expression to bind an argument to the function. The same kind of thing can be done using functools.partial
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  [Tkinter] how to make label or button not visible with the place method? nowayj63 2 203 Jan-03-2023, 06:29 PM
Last Post: Yoriz
Question [Tkinter] How to make split button? teknixstuff 2 216 Jan-03-2023, 06:21 PM
Last Post: Yoriz
  Can't change the colour of Tk button text Pilover 6 10,552 Nov-15-2022, 10:11 PM
Last Post: woooee
  Updating button text based upon different variable values knoxvilles_joker 0 1,651 Apr-18-2021, 04:13 AM
Last Post: knoxvilles_joker
  update text variable on label with keypress knoxvilles_joker 3 3,316 Apr-17-2021, 11:21 PM
Last Post: knoxvilles_joker
  [Tkinter] tkinter.Menu – How to make text-variable? Sir 3 4,023 Mar-10-2021, 04:21 PM
Last Post: Sir
  tkinter | Button color text on Click Maryan 2 2,524 Oct-09-2020, 08:56 PM
Last Post: Maryan
  How to make button text bold in Tkinter? scratchmyhead 2 7,876 May-16-2020, 02:53 AM
Last Post: scratchmyhead
  [Tkinter] Text Button - How Do I Reduce The Margin? vman44 6 7,617 Apr-27-2020, 10:48 PM
Last Post: Larz60+
  [Tkinter] how to update label text from list Roshan 8 3,776 Apr-25-2020, 08:04 AM
Last Post: Roshan

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020