Приводим пример использования объектов класса 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. Программа игры крестики-нолики.