2016-08-16 3 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を持って、私はそれを実行しようとすると、このコードで問題を抱えていると出力のみをされてい私が間違っていたことを見ても、それでもエラーを見つけることはできません。 「Numbers」機能にある最後の番号だけが選択されます。TTK、ボタンは唯一私が試し3. 1つのそれらの数

何か助けていただければ幸いです。

答えて

1

あなたが最後の内側のループでself.bをオーバーライドしています。これを試してみてください:

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

私はこれがどうなるかを見ています。唯一の違いは、数値が最初に垂直に、次に水平になることです。私はちょうど周りの順序を変更することでそれを修正することができます。 – kacper19990

+0

正しい。私はそれに気付かなかった。 – chefarov

3

グリッド上の各スポットについて、9つのボタンを作成し、それぞれのボタンを重ねて配置します。最後のボタン(3に対応するボタン)のみが表示され、毎回表示されます。代わりに、あなたはcrに基づいてインデックスを把握し、唯一の1つのボタンを作成する必要があります。

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

ありがとうございました! #print(b) c + 2の場合 c = 0 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

関連する問題