【问题标题】:Beginner Python Keyboard GUI setup初学者 Python 键盘 GUI 设置
【发布时间】:2016-11-08 20:14:52
【问题描述】:

我开始使用 Python 3.5 的 GUI,我正在尝试设置一个简单的 qwerty 键盘。根据示例,我尝试了以下代码

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 作为范围,它创建了键盘的前两行,但它仍然没有继续到最后一行。

【问题讨论】:

  • 您对continue 声明的意图是什么?

标签: python user-interface tkinter keyboard


【解决方案1】:

您的问题在n -= 1 行中。每次创建标签时,您都会在第一整行 n==0 之后减少 n,因此范围是 0>0,并且范围从不包括上限 - for c in range(0) 只会从循环(因为它循环了所有不存在的内容)。

更好的解决方案是遍历列表而不是索引——for 循环采用任何可迭代对象(列表、字典、范围、生成器、集合等);

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.

【讨论】:

    【解决方案2】:

    这是你想要的吗?如果您需要我进一步解释,请告诉我,但基本上我所做的是首先填充每一行中的列。所以行保持为 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()   
    

    【讨论】:

      猜你喜欢
      • 2012-03-05
      • 1970-01-01
      • 1970-01-01
      • 2013-12-31
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      • 2012-12-10
      • 1970-01-01
      相关资源
      最近更新 更多