使用Tkinter的按钮输入

问题描述:

我在Python 3.4.1中创建BattleShip,我使用的是Tkinter。使用Tkinter的按钮输入

这是我的源代码:

from tkinter import * 

vText = ["A","B","C","D","E","F","G","H","I","J"] 

def press(a,b): 
    print("You pressed: " + str(a * 10 + b)) 

root = Tk() 

def button(): 
    for i in range(0,10): 
     global self 
     for j in range(1,11): 
      self = Button(root, text = vText[i] + str(j), command = lambda: press(i,j), padx = 20, pady = 20).grid(row = i, column = j) 
    root.wm_title("Enemy grid") 
button() 
root.mainloop() 

后来我想基于按下哪个按钮做功能。我怎么做?

使press函数接受附加参数。

def press(a, b, text): 
    print("You pressed: " + str(a * 10 + b), text) 

而且通过按钮文本功能:

Button(root, text = vText[i] + str(j), 
     command=lambda i=i, j=j, text=vText[i] + str(j): press(i, j, text), 
     padx=20, pady=20).grid(row=i, column=j) 

注:lambda使用关键字参数来的ij当前值绑定。如果您不使用关键字参数,i,j,..将引用在循环中分配的最后一个值。

顺便说一句,grid什么也没有返回(=返回None)。将返回值赋给变量没有意义。

+0

感谢您的快速响应。但是,它似乎没有工作。我不明白打印声明中的逗号。这是一个错字或什么?相对较新的python,但是当我使用你的代码它有错误嘉豪。 – 2014-10-12 04:09:16

+0

另外,我知道我和j引用最后的值。任何方式来阻止呢? – 2014-10-12 04:12:58

+0

@ 3.14-Thon,',文本'在那里打​​印'文本'通过。 – falsetru 2014-10-12 04:13:41