2014-10-12 4 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

Спасибо за ваш быстрый ответ. Однако, похоже, это не сработало. Я не понимаю запятую в заявлении печати. Это была опечатка или что-то еще? Относительно новый для python, но когда я использовал ваш код, у него были ошибки в изобилии. –

+0

Кроме того, я знаю, что i и j ссылаются на последние значения. Любой способ остановить это? –

+0

@ 3.14-Thon, ', text' отправлен на печать' text'. – falsetru

Смежные вопросы