2016-07-06 14 views
2

Ich beginne GUI in Python 3.5, und ich versuche, eine einfache QWERTY-Tastatur einzurichten. Basierend auf den Beispielen habe ich den folgenden Code versuchtAnfänger Python Tastatur GUI-Konfiguration

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 

Dies gibt mir die erste Zeile, aber es gibt nichts zurück. Ich habe versucht, einfach 10 als Bereich zu verwenden, der die ersten beiden Zeilen der Tastatur erstellt hat, aber es ging immer noch nicht in die letzte Zeile.

+0

Was ist Ihre Absicht mit der 'continue'-Anweisung ? –

Antwort

1

Ihr Problem ist in der Zeile n -= 1. Jedes Mal, wenn ein Etikett erstellt wird, machen Sie n eins weniger - nach der ersten ganzen Zeile, n==0, und damit der Bereich ist 0> 0, und Bereiche nie die hohe Grenze enthalten for c in range(0) wird nur aus der Schleife fallen (wie es geloopt hat durch alle nicht vorhandenen Inhalte).

Eine bessere Lösung beinhaltet die Iteration durch die Listen statt durch die Indizes-for Schleifen nehmen alle iterierbaren (Liste, Wörterbuch, Bereich, Generator, Set, & 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

Ist es das, was Sie wollen? Lassen Sie mich wissen, wenn Sie mich brauchen, um es weiter zu erklären, aber im Grunde füllt das, was ich mache, zuerst die Spalten in jeder Reihe. So bleibt Zeile 0 und dann wie ich durch die Spalte (die innere Liste) fülle ich jeden der Schlüssel, dann auf die nächste Zeile und usw.

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() 
Verwandte Themen