Приводим пример использования объектов класса StringVar из библиотеки tkinter для изменения свойств визуальных  объектов. Пишем игру крестики-нолики.

from tkinter import *

who = True

def play(n):
    global who
    if btnTxt[n].get()==' ':
        btnTxt[n].set('X' if who else 'O')
        who = not(who)

frm = [Frame() for i in '012']
for i in frm: i.pack(expand=YES, fill=BOTH)
btnTxt = [StringVar() for i in range(9)]
for i in btnTxt: i.set(' ')
btn = [Button(frm[i//3], textvariable=btnTxt[i], command=lambda n=i:play(n), font=('mono', 20, 'bold'), width=3, height=2) for i in range(9)]
for i in btn: i.pack(expand=YES, fill=BOTH, side=LEFT, padx=1, pady=1)

mainloop()

Лист. 1. Программа игры крестики-нолики.

Рис. 1. Игра крестики-нолики

from tkinter import *

class btn(Button):
    who = True
    def __init__(self, conteiner):
        super().__init__(conteiner)
        self.config(text=' ', font=('mono',20,'bold'), width=3, height=2)
        self.config(command=self.play)
        self.pack(side=LEFT, expand=YES, fill=BOTH, padx=1, pady=1)
    def play(self):
        if self.cget('text') == ' ':
            self.config(text=('X' if btn.who else 'O'))
            btn.who = not(btn.who)
size = 3
frm = [Frame() for i in range(size)]
for i in frm:
    i.pack(expand=YES, fill=BOTH)
    [btn(i) for j in range(size)]

Лист. 2. Программа игры крестики-нолики.