Home > front end >  The text of button wont change
The text of button wont change

Time:02-18

Im making an tic tac toe but when the button got click the button wont change this the example

from tkinter import *
a = Tk()
def c():
    t = "X"

t = ""
b=Button(a, text= t, command=c)
b.pack()
a.mainloop()

This just an example plss give any way to change the text of button by calling

CodePudding user response:

The line t = "X" creates a new variable inside the function c(), which is then garbage collected when the function exits. Also the button text is not set.

You can change the button text with the .config() method:

from tkinter import *

a = Tk()

def c():
    b.config(text="X")

t = ""
b = Button(a, text=t, command=c)
b.pack()

a.mainloop()

CodePudding user response:

The problem is your t is not in the same scope. For example:

def change():
   a=10000

a=100
print(a)
change()
print(a) 


OUTPUT:
100
100

Functions are like vegas, what happens there, stays there. Read up on scope in more detail here: https://www.w3schools.com/python/python_scope.asp

It's been a while since I've used tkinter, but I do remember creating classes and using them was super helpful for keeping things string.

Here is an example of how to set up a class with a method to change it

from Tkinter import *


class Board:
    TurnMarker="X"
    root=Tk()

class button:
    def __init__(self,GameBoard,x,y):
           self.text=""
           self.x=x
           self.y=y
           self.GameBoard=GameBoard
           self.button=Button(GameBoard.root,self.text,command=self.set)
           self.button.grid(row=y,column=x)
    def set(self):
        self.button["text"]=self.GameBoard.TurnMarker
        if self.GameBoard.TurnMarker=="X":
            self.GameBoard.TurnMarker="O"
        else:
            self.GameBoard.TurnMarker="X"

board=Board()




for y in range(3):
    for x in range(3):
        b=button(board,x,y)




This is an example of using classes both for the buttons and board. Classes make working with Tkinter much easier.

  • Related