2011-08-03 38 views
9

Tôi nhận được 2 nút, tương ứng có tên 'ButtonA', 'ButtonB'. Tôi muốn chương trình in 'hello, ButtonA' và 'hello, ButtonB' nếu bất kỳ nút nào được nhấp. Mã của tôi là như sau:Làm cách nào để chuyển đối số sang lệnh gọi lại của nút Tkinter?

def sayHi(name): 
    print 'hello,', name 

root = Tk() 
btna = Button(root, text = 'ButtonA', command = lambda: text) 
btna.pack() 

Khi tôi bấm ButtonA, lỗi xảy ra, text not defined.

Tôi hiểu lỗi này, nhưng làm cách nào tôi có thể chuyển văn bản của ButtonA sang lambda?

+1

thể trùng lặp của [đi qua lập luận trong python nút Tkinter command] (http://stackoverflow.com/questions/6920302/passing-argument-in-python-tkinter-nút-lệnh). Người khác đã xảy ra 5 giờ trước bởi người dùng khác. Sự trùng hợp tuyệt vời! –

Trả lời

20

này nên làm việc:

... 
btnaText='ButtonA' 
btna = Button(root, text = btnaText, command = lambda: sayHi(btnaText)) 
btna.pack() 

Để biết thêm thông tin hãy nhìn vào Tkinter Callbacks

+0

Giải pháp tuyệt vời –

+0

Tôi cần gọi hàm của mình bằng cách sử dụng 'lambda: self.MyFunction (MyParam)' không chắc liệu giá trị của nó có phải là chỉnh sửa không? – WhatsThePoint

2

văn bản không phải là chức năng trong trường hợp của bạn. Chỉ cần làm như sau:

value = 'ButtonA' 
btna = Button(root, text = value, command = lambda: sayHi(value)) 

Và bạn sẽ làm việc đó.

+0

Câu trả lời này không cho biết cách in "hello, " giống như câu hỏi. –

+0

Được rồi, tôi đã không đọc câu hỏi hoàn toàn. Bạn chỉ cần xác định giá trị văn bản trước và gửi nó tới cuộc gọi lại lamdba. –

Các vấn đề liên quan