2016-07-06 58 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作爲範圍,它創建了鍵盤的前兩行,但它仍然沒有延續到最後一行。

+0

你對「continue」語句的意圖是什麼? –

回答

1

你的問題是在n -= 1行。每次創建標籤時,都會減少一個,即第一行整數n==0,因此範圍爲0> 0,且範圍永遠不會包含上限 - 將從循環中刪除(因爲它已循環通過所有不存在的內容)。

更好的解決方案是迭代遍歷列表而不是通過索引 - for循環採用任何迭代(列表,字典,範圍,生成器,集合,& 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()