2016-12-07 10 views
0

今すぐコードが実行され、computer_move関数*の下で次のif文が実行されます。私はそれがプレーヤーが別のボタンをクリックするのを待つことを望む。今、コードはプレーヤーがボタンをクリックする前にxを配置して "o"を配置します。pythonがそれを待つ方法(tkinter)

import tkinter as tk 

board = tk.Tk() 

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

def computer_move(): 
    if i["text"] == "Open Space": 
     i["text"] = "x" 
     i["state"] = "disabled" 
    else: 
     c["text"] = "x" 
     c["state"] = "disabled" 
    if a["text"] and c["text"] == "x" or "o": # * 
     b["text"] = "x" 
     b["state"] = "disabled" 

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

buttons = [] 

a = tk.Button(board, text="x", state = "disabled") 
a["command"] = lambda x=a:player_move(x) 
a.grid(row=0, column = 0) 
buttons.append(a) 

board.mainloop() 
+0

内のコードがif' statemante '実行されません - あなたは'ボタン(ボード、テキスト=「X」、状態=「無効」)を使用して 'X'と無効ボタンを設定し 'てプログラムすることができます」ボタンをクリックすると、イベント 'computer_move()'が実行されます。 – furas

+0

["text"]とc ["text"] == "x"または "o"の場合はどうしますか:#* '? – furas

+0

あなたは 'widget [" o "]'で何をしようとしますか? '(" ["text"])と(c ["text"] == "x" ? 'widget'はプロパティ" o "を持たず、プロパティ" text " - widget [" text "]'を持っています - 値は '' o "'や '' x "'(またはその他)かもしれません。 – furas

答えて

1

コードがxを設定するものではありませんが、そうtext="x", state="disabled"


ところで取り除くライン

a = tk.Button(board, text="x", state= "disabled") 

でそれを行う:

widget["o"]することは間違っている - ボタンがありません名前は"o"です。
それは性質"text"有する - widget["text"] - 値"o"又は"x"

if a["text"] and c["text"] == "x" or "o":むしろincorrentで有していてもよいです。特に

c["text"] == "x" or "o" 

それは私がリスト上のボタンを維持する方が良いあなたが

if a["text"] in ("x", "o") and c["text"] in ("x", "o"): 

をしようと思います

c["text"] == "x" or c["text"] == "o" 

または

c["text"] in ("x", "o") 

なければならない - あなたはforループを使用してすべてのボタンをチェックすることができますcomputer_move

import tkinter as tk 

# --- functions --- 

def player_move(btn): 
    # if button is empty 
    if btn["text"] not in ("o", "x"): 
     # then set `o` and disable button 
     btn["text"] = "o" 
     btn["state"] = "disabled" 
     # and make comuter move 
     computer_move() 

def computer_move(): 
    # check all buttons 
    for btn in buttons: 
     # if button is empty 
     if btn["text"] not in ("o", "x"): 
      # then set `x` and disable button 
      btn["text"] = "x" 
      btn["state"] = "disabled" 
      # and skip checking other buttons 
      break 

# --- main --- 

board = tk.Tk() 

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

buttons = [] 

for row in range(3): 
    for col in range(3): 
     btn = tk.Button(board, width=1) 
     btn["command"] = lambda x=btn:player_move(x) 
     btn.grid(row=row, column=col) 
     buttons.append(btn) 

board.mainloop() 
関連する問題