2016-07-06 4 views
2

私はPython 3.5でGUIを開始しています。私は簡単なQWERTYキーボードを設定しようとしています。例に基づいて、私は次のコードを試しました初心者のPythonキーボードのGUI設定

from tkinter import Tk, Label, RAISED, Button, Entry 

self.window = Tk() 

    #Keyboard 
    labels = [['q','w','e','r','t','y','u','i','o','p'], 
       ['a','s','d','f','g','h','j','k','l'], 
       ['z','x','c','v','b','n','m','<']] 

    n = 10 
    for r in range(3): 
     for c in range(n): 
      n -= 1 
      label = Label(self.window, 
           relief=RAISED, 
           text=labels[r][c]) 
      label.grid(row=r,column=c) 
      continue 

これは私に最初の行を与えますが、それ以外は何も返しません。私は単純に10を範囲として使用してみましたが、これはキーボードの最初の2行を作成しましたが、それでも最後の行には続きませんでした。

+0

'continue'ステートメント? –

答えて

1

問題はn -= 1です。ラベルが作成されるたびに、n==0の最初の行全体を1つ下回るようにを作成すると、範囲は0> 0になり、範囲には上限が含まれません。for c in range(0)は、存在しないすべてのコンテンツを通して)。 ループは任意の反復可能(リスト、辞書、範囲、ジェネレータ、セット、& c)です。

for lyst in labels: 
    # lyst is each list in labels 
    for char in lyst: 
     # char is the character in that list 
     label = Label(... text=char) # everything else in the Label() looks good. 
     label.grid(...) # You could use counters for this or use ennumerate()-ask if you need. 
     # The continue here was entirely irrelevant. 
0

これはあなたがやりたいことですか?あなたが私にそれをさらに説明する必要があるかどうかを教えてください。基本的に私がやっていることは、最初に各行の列を塗りつぶすことです。したがって、行は0のままで、次に列(内部リスト)をループすると、それぞれのキーを入力し、次の行などに入力します。

from tkinter import Tk, Label, RAISED, Button, Entry 


window = Tk() 

#Keyboard 
labels = [['q','w','e','r','t','y','u','i','o','p'], 
      ['a','s','d','f','g','h','j','k','l'], 
      ['z','x','c','v','b','n','m','<']] 

for r in labels: 
    for c in r: 
     label = Label(window, relief=RAISED, text=str(c)) 
     label.grid(row=labels.index(r), column=r.index(c)) 
window.mainloop()