2014-10-12 3 views
0

나는 BattleShip을 Python 3.4.1로 만들고 있는데 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() 

나중에 내가 누르면 어떤 버튼을 기반으로하는 기능을 수행합니다. 어떻게해야합니까?

답변

2

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의 키워드 인수의 사용 i, j의 현재 값을 바인딩합니다. 키워드 인수를 사용하지 않으면 i, j, ..은 루프에서 지정된 마지막 값을 참조합니다.

BTW, grid은 아무 것도 반환하지 않습니다 (= None을 반환). 변수에 반환 값을 할당하는 것은 의미가 없습니다.

+0

빠른 응답을 보내 주셔서 감사합니다. 그러나, 그것은 작동하지 않았다. print 문에서 쉼표를 이해할 수 없습니다. 저것이 오타입니까? 파이썬에 비해 비교적 새로운데, 내가 코드를 사용했을 때 에러가 많았다. –

+0

또한 i와 j는 마지막 값을 참조합니다. 그걸 막을 방법이 있니? –

+0

@ 3.14 - Thon,', text'는'text'가 인쇄 된 것을 인쇄합니다. – falsetru