2016-12-04 1 views
-1

これは私がやろうとしたものです:if = if(ボタンをクリックするとテキストを変更する)=ボタンを無効にするifステートメントを作成したいと思います。 また、別のif文は、コンピュータがボタンの1つを「x」にすることです。その後、ボタンを再び有効にしたい。ボタンのテキストを変数にしてifステートメントにする方法はありますか? (tkinter)

import tkinter as tk 

board = tk.Tk() 

def change(widget): 
    widget.config(text='o', command=None) 

board.geometry("400x500") 
board.title("Board") 

a = tk.Button(board, the_part_I_tried_to_change1= text="Open Space") 
a["command"] = lambda:change(a) 
a.grid(row=0, column = 0) 

b = tk.Button(board, the_part_I_tried_to_change2 = text="Open Space") 
b["command"] = lambda:change(b) 
b.grid(row=0, column = 1) 

c = tk.Button(board, text="Open Space") 
c["command"] = lambda:change(c) 
c.grid(row=0, column = 2) 

d = tk.Button(board, text="Open Space") 
d["command"] = lambda:change(d) 
d.grid(row=1, column = 0) 

e = tk.Button(board, text="Open Space") 
e["command"] = lambda:change(e) 
e.grid(row=1, column = 1) 

f = tk.Button(board, text="Open Space") 
f["command"] = lambda:change(f) 
f.grid(row=1, column = 2) 

g = tk.Button(board, text="Open Space") 
g["command"] = lambda:change(g) 
g.grid(row=2, column = 0) 

h = tk.Button(board, text="Open Space") 
h["command"] = lambda:change(h) 
h.grid(row=2, column = 1) 

i = tk.Button(board, text="Open Space") 
i["command"] = lambda:change(i) 
i.grid(row=2, column = 2)a 
+0

テキストを変更するには、関数 'change'を持っています。同じ機能では、 'widget.config(state =" disabled ")'を使用してボタンを無効にすることができますが、前の質問への回答でそれを得ることができます。 – furas

+0

'Button'テキストを取得するには' widget ['text'] '(関数' change')や 'a ['text']'のいずれかの場所で使用できます。 BTW:ボタンを 'a'、' b''、 'c'などの代わりに' a [0] '、' a [1] '、' a [2] 'などのリストにしておくと、 – furas

+0

答えの文脈でこれを入れられる方法はありますか?もしそれができれば素晴らしいだろう。 –

答えて

0

あなたが機能change

を使用することができます Buttonテキストを取得するには、次の

text = widget['text'] 

# or 

text = widget.cget('text') 

を任意の場所に:

text = a['text'] 

# or 

text = a.cget('text') 

SAMは他のプロパティである - すなわち。 widget['state']widget['background']など

より:ところでeffbot.org - Button


:あなたがリストとしてのボタンを続ければ、それが簡単かもしれない - buttons[0]buttons[1]buttons[2]などの代わりに、abcなど。次にforを使用できます。アクティブにすべてのボタンが再び

for x in buttons: 
    x['state'] = 'normal' 

import tkinter as tk 

# --- functions -- 

def player_move(widget): 
    if widget['text'] not in ('o', 'x'): 
     widget['text'] = 'o' 
     computer_move() 

def computer_move(): 
    # find button and put 'x' 
    for x in buttons: 
     if x['text'] not in ('o', 'x'): 
      x['text'] = 'x' 
      break # don't check other buttons 

# --- main --- 

board = tk.Tk() 

board.title("Board") 

# - buttons - 

buttons = [] 

for r in range(3): # r = row number 
    for c in range(3): # c = column number 
     b = tk.Button(board, text="Open Space", height=10, width=15) 
     b["command"] = lambda x=b:player_move(x) # lambda need `x=b` because direct `player_move(b)` has strage effect in `for` loop. 
     b.grid(row=r, column=c,) 
     buttons.append(b) 

# - start - 

board.mainloop() 
+0

私はリストを作ることをどのように提案しますか?説明はあまり明確ではありません。コード内に –

+0

がすでにありました - 'buttons = []' - 私は 'for'を使ってこのリストにボタンを追加しました。そして、後で 'computer_move()'でこのリストを使って空の場所/ボタンを探しました。 – furas

関連する問題