当前位置: 首页 > 知识库问答 >
问题:

为什么我的Tkinter小部件存储为None?[副本]

赖淇
2023-03-14

我将我的按钮放入一个数组中,但当我调用它们时,它们不在那里。如果我打印出阵列,我会得到:

{0: None, 1: None, 2: None, 3: None, 4: None, 5: None, 6: None, 7: None, ...}

我只是不知道我做错了什么。

from tkinter import *

def main():
    pass

if __name__ == '__main__':
    main()

b={}

app = Tk()
app.grid()

f = Frame(app, bg = "orange", width = 500, height = 500)
f.pack(side=BOTTOM, expand = 1)


def color(x):
   b[x].configure(bg="red") # Error 'NoneType' object has no attribute 'configure'
   print(b) # 0: None, 1: None, 2: None, 3: None, 4: None, 5:.... ect


def genABC():
    for r in range(3):
        for c in range(10):
            if (c+(r*10)>25):
                break
            print(c+(r*10))
            b[c+(r*10)] = Button(f, text=chr(97+c+(r*10)), command=lambda a=c+(r*10): color(a), borderwidth=1,width=5,bg="white").grid(row=r,column=c)

genABC()
app.mainloop()

共有1个答案

缑泓
2023-03-14

每个Tkinter小部件的ridpackplace方法就地操作,并且总是返回No。这意味着您不能在创建小部件时在同一行调用它们。相反,他们应该在下面的行调用:

widget = ...
widget.grid(...)

widget = ...
widget.pack(...)

widget = ...
widget.place(...)

因此,在您的代码中,应该是:

b[c+(r*10)] = Button(f, text=chr(97+c+(r*10)), command=lambda a=c+(r*10): color(a), borderwidth=1,width=5,bg="white")
b[c+(r*10)].grid(row=r,column=c)
 类似资料:
  • 问题内容: 我从python学到的内容无: 当我放入列表并用数字和字符串排序时。我得到以下结果,这意味着它是最小的数字? 逆转: 正常排序: python sorted function如何与None一起工作? 问题答案: 比较不同类型时,CPython 2应用了一些不同的规则: 首先排序。 数字先于其他类型,并且在数字之间进行比较。 其他类型按其类型 名称 排序,除非它们显式实现比较方法。 此外

  • 问题内容: 这是我在Linux上编译的一些代码: 很好 很好 失败并显示以下错误: 不喜欢Linux中C99的定义与C99有何不同? 问题答案: 这是预处理和GNU C vs C99的一系列后果。 首先,: 包括 稍后,它在一个块内定义。 所以: 什么啊 -这是BSD和System V共有的东西 在这一点上定义了吗?-我们需要检查一下 所以现在: 默认情况下,当您使用GCC时定义(因为这就是C99

  • 我目前正在为一个项目使用Firebase。在我的应用程序的存储部分,我注意到我存储了大约500 MB(与带宽发送的MB数量相似)。 当我分解它时,几乎所有这些都来自“[REGION].artifacts.[PROJECT-ID].appspot.com”,我不明白这是什么。这是什么?我是否需要担心它在未来会占用更多的空间? 在上下文中,我的存储下存储了零个文件,而主机的总存储空间不足1MB。我正在

  • 问题内容: 为什么要用Python返回? 我如何获得改组后的值而不是? 问题答案: 更改列表 到位 。 在原位更改结构的Python API方法通常返回,而不是修改后的数据结构。 如果要基于现有列表创建 新的 随机混排列表,并按顺序保留现有列表,则可以使用输入的完整长度: 您还可以将with用于排序键: 但这会调用排序(O(NlogN)操作),而采样到输入长度仅需要O(N)操作(与所使用的过程相同

  • 问题内容: 我熟悉Tkinter,并且尝试编写一个非常简单的程序,该程序使用包几何管理器在窗口中显示一个按钮。 我与各种配置选项试验,如,和,和我碰到一个特殊的问题。我写了以下代码: 问题在于按钮会在水平方向(而不是垂直方向)上展开以填充窗口。如果没有指定我使用,则得到的结果相同。另外,如果我指定的话,按钮不会向任一方向扩展。垂直方向上的填充似乎出了问题,我无法弄清楚它可能是什么。 我尝试使用Go

  • 我在用python修改文本时遇到了问题,尽管我看到很多人在使用它 我的代码: