2016-12-04 33 views
-1

这是我试图做的: 我想做一个if语句,说如果text =“o”(它点击时改变按钮的文本)使按钮被禁用。 另一个if语句是计算机将其中一个按钮变成“x”。之后,我想再次启用按钮。在任何地方有没有办法让一个按钮的文本变成一个if语句? (tkinter)

text = widget['text'] 

# or 

text = widget.cget('text') 

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'中)或'''text']'在任何地方。顺便说一句:如果你把按钮保存为列表 - “a [0]”,“a [1]”,“a [2]”等,而不是“a”,“b”,“c”等,会更容易。 – furas

+0

有没有一种方法可以把它放在答案的上下文中?如果你能这样做会很好。 –

回答

0

要获得Button文本可以在功能change使用

text = a['text'] 

# or 

text = a.cget('text') 

山姆是与其他属性 - 即。 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

相关问题