2015-09-16 29 views
0

我試圖做到這一點,當用戶點擊一個按鈕時,它變成「X」或「0」(取決於他們的團隊)。我怎樣才能讓它更新按鈕上的文字?到目前爲止,我最好的想法是刪除按鈕然後再次打印它們,但只刪除一個按鈕。這是我迄今爲止:Python 3,Tkinter,如何更新按鈕文本

from tkinter import * 

BoardValue = ["-","-","-","-","-","-","-","-","-"] 

window = Tk() 
window.title("Noughts And Crosses") 
window.geometry("10x200") 

v = StringVar() 
Label(window, textvariable=v,pady=10).pack() 
v.set("Noughts And Crosses") 

def DrawBoard(): 
    for i, b in enumerate(BoardValue): 
     global btn 
     if i%3 == 0: 
      row_frame = Frame(window) 
      row_frame.pack(side="top") 
     btn = Button(row_frame, text=b, relief=GROOVE, width=2, command = lambda: PlayMove()) 
     btn.pack(side="left") 

def PlayMove(): 
    BoardValue[0] = "X" 
    btn.destroy() 
    DrawBoard() 

DrawBoard() 
window.mainloop() 

回答

3

Button小部件,就像您的標籤,也有一個textvariable=選項。您可以使用StringVar.set()來更新按鈕。最小的例子:

import tkinter as tk 

root = tk.Tk() 

def update_btn_text(): 
    btn_text.set("b") 

btn_text = tk.StringVar() 
btn = tk.Button(root, textvariable=btn_text, command=update_btn_text) 
btn_text.set("a") 

btn.pack() 

root.mainloop() 
+0

我怎樣才能讓它點擊按鈕是一個變化,雖然。現在它只是由於某種原因更新最後一個按鈕 – Mrchooch

+0

@Mchchooch你需要爲每個按鈕分配一個'tk.StringVar'。看看http://effbot.org/tkinterbook/variable.htm – David

+1

你也可以直接調用按鈕的'configure'方法,而不必使用'StringVar'。雖然使用'StringVar'會起作用,它會添加一個額外的對象來維護,而不會帶來額外的好處。 –