2017-12-30 22 views
-1
class Calc: 
    def __init__(self): 
     ls = ("1", "2", "3", "4", "5", "6", "7", "8", "9", "-", "+", "/", "x", "=", "a", ".") 
     column = 5 
     row = 5 
     count = 2 

     for x in ls: 
      bt=Button(root, text=x, command="") 


      for y in x: 

       bt.grid(row=(row), column=(column)) 
       column = column + 1 
       count = count + 1 
       if count> row: 
        column = column-4 
        row = row +4 


cal=Calc() 

이상은 내 코드입니다. 내 질문에 어떻게 버튼을 누르면, 예를 들어 버튼 1, 콘솔에 1을 인쇄 할 함수를 호출 할 수 있습니다. 1, 16 버튼의 전체 목록을 인쇄 할 수있는 것만 보이거나 목록의 마지막 위치 인 "."을 인쇄 할 수 있습니다. 1 또는 2 또는 3 등을 인쇄 할 수 없습니까?python tkinter 버튼 명령을 사용하여 함수를 호출하는 방법

+0

이 코드 나는 당신의 문제는 ([이 사람]과 비슷한 생각 모든 방법 – Nick

+1

에 의해 클래스 캘크에서 https://stackoverflow.com/questions/39174661/tkinter- button-commands-in-for-loop) –

+0

https://stackoverflow.com/q/17677649/7032856을 참조하십시오. – Nae

답변

0

lambda을 사용하여 매개 변수가있는 함수를 할당 할 수 있습니다. 당신이 forlambda를 사용하는 경우

당신은 당신이 lambda:self.on_press(item)를 사용하면 다음이 item에서 item이 아니라 가치에 기초를 사용하기 때문에 lambda

command=lambda char=item:self.on_press(char) 

char=item을 사용해야합니다. 그리고 버튼을 누를 때 item에서 값을 얻을 것입니다. 그러나 for 루프 후에는 마지막 값을 갖고 모든 버튼이 같은 값을 갖습니다.

전체 코드

import tkinter as tk  

class Calc: 

    def __init__(self, master): 
     ls = (
      ("1", "2", "3"), 
      ("4", "5", "6"), 
      ("7", "8", "9"), 
      ("-", "+", "/"), 
      ("x", "=", "a"), 
      (".") 
     ) 

     for r, row in enumerate(ls): 
      for c, item in enumerate(row): 
       bt = tk.Button(master, text=item, command=lambda char=item:self.on_press(char)) 
       bt.grid(row=r, column=c) 

    def on_press(self, char): 
     print(char) 

# --- main --- 

root = tk.Tk() 
cal = Calc(root) 
root.mainloop() 
+0

당신이 알고 있는지 확실하게 저를 위해 그것을 풀어 준 고맙습니다. 실제로 람다를 사용해 보았지만이를 구현하는 가장 좋은 방법은 확실하지 않았습니다. 다시 한 번 감사드립니다! – Nick

관련 문제