2016-08-16 2 views
2
import tkinter 
from tkinter import ttk 

def main(): 
    root = tkinter.Tk() 
    numpad = NumPad(root) 
    root.mainloop() 

numbers = [ 
'7', '8', '9', 
'4', '5', '6', 
'1', '2', '3'] 


class NumPad(ttk.Frame): 
    def __init__(self, root): 
     ttk.Frame.__init__(self, root) 
     self.grid() 
     self.num() 

    def num(self): 
     for c in range(1,4): 
      for r in range(3): 
       for b in numbers: 
        cmd = lambda b=b: print(b) 
        self.b= ttk.Button(self, text=b, command=cmd).grid(row = r, column = c, pady = 5) 
        #print(b) 

main() 

이 코드에 문제가 있습니다. 실행하려고하면 모든 버튼이 3 개 뿐이고 출력은 3 개입니다. 시도해 보았습니다. 내가 뭘 잘못했는지보고 있지만 여전히 오류를 찾을 수 없습니다. "숫자"기능에있는 마지막 번호 만 선택합니다.TTK, 버튼에는 숫자가 하나만 있습니다.

도움을 주시면 감사하겠습니다.

답변

1

: 대신 cr에 따라 인덱스를 알아 내기 만 1 개 버튼을 만들어야합니다. 이 시도 :

import tkinter 
from tkinter import ttk 

def main(): 
    root = tkinter.Tk() 
    numpad = NumPad(root) 
    root.mainloop() 

numbers = [ 
'7', '8', '9', 
'4', '5', '6', 
'1', '2', '3'] 


class NumPad(ttk.Frame): 
    def __init__(self, root): 
     ttk.Frame.__init__(self, root) 
     self.grid() 
     self.num() 

    def num(self): 
     for c in range(3): 
      for r in range(3): 
       text = numbers[c*3+r] 
       cmd = lambda text=text: print(text) 
       self.b= ttk.Button(self, text=text, command=cmd).grid(row = r, column = c, pady = 5) 

main() 
+0

: C> 2 있을지 + C = 1이 아닌 #print (b)를 수행하여이를 해결할 수 있었다. 유일한 차이점은 숫자가 세로로 먼저 이동 한 다음 가로로 이동한다는 것입니다. 순서를 바꿔서 고칠 수 있습니다. – kacper19990

+0

수정하십시오. 나는 그것을 알아 채지 못했다. – chefarov

3

그리드의 각 지점에 대해 9 개의 버튼을 만들고 다른 하나의 상단에 배치하고 있습니다. 마지막 버튼 (3에 해당하는 버튼) 만 나타나서 끝날 때마다 나타납니다. 당신은 마지막으로 내부 루프에서 self.b 재정의

def num(self): 
    for c in range(1,4): 
     for r in range(3): 
      b = (c - 1) * 3 + r 
      cmd = lambda b=b: print(b) 
      self.b= ttk.Button(self, text=b, command=cmd).grid(row = r, column = c, pady = 5) 
      #print(b) 
+0

감사합니다! C = O + R = 1 '나는 지금 어떻게되는지 – kacper19990

0

쌍 각 행 열이 zip를 사용하여 numbers에서 하나 개의 항목으로 좌표

def num(self): 
    rc_gen = ((r, c) for r in range(3) for c in range(3)) 
    for (r, c), num in zip(rc_gen, numbers): 
     cmd = lambda num=num: print(num) 
     self.b = ttk.Button(self, text=num, command=cmd).grid(row=r, column=c, pady=5) 
+0

매력처럼 작동합니다! 감사 :) – kacper19990