在这种情况下,为什么tkinter不接受self=None?

编程语言 2026-07-10

给定:

for i in range(5):
    if comparisonGuess[i]==word[i]:
        print(f"{guess[i]} is in the word at position {i+1}. hooray")
        ctk.CTkLabel.place(self=None, text={guess[i]},x=120+(i*30),y=guessCount*25,bg="green")

抛出错误:

File "C:\Users\name\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\customtkinter\windows\widgets\core_widget_classes\ctk_base_class.py", line 273, in place
    self._last_geometry_manager_call = {"function": super().place, "kwargs": kwargs}
                                                    ^^^^^^^^^^^^^
TypeError: super(type, obj): obj (instance of NoneType) is not an instance or subtype of type (CTkBaseClass).

在定义类 App(ctk.CTk) 和函数 __init__(self) 之后,我有 super().__init__() 存在。这是为什么会发生?如果这是我没看到的一个很容易修正的方法,请见谅。我那门计算机科学课的老师、助教和我都对如何修复这个问题一筹莫展。self=App 也不起作用。当去掉 ctk.CTkLabel.place() 这一行时,比较和打印都能正常工作。我还尝试创建一个等于 self 的变量。

解决方案

问题在于你把 CTkLabel 用错了。

你必须用 () 创建类的实例,随后在不使用 self 的情况下使用 place()
你还把 textbg 放错位置。

CTkLabel(app, text="{guess[i]}", bg_color="green").place(x=120+(i*30),y=guessCount*25)

或者把它保存在变量中(以便稍后访问标签)

my_label = CTkLabel(app, text="{guess[i]}", bg_color="green")
my_label.place(x=120+(i*30), y=guessCount*25)

关于 CTkLabel 的官方文档给出类似的示例(但不包含 place/pack/grid

label = customtkinter.CTkLabel(app, text="CTkLabel", fg_color="transparent")

最小可运行代码

import customtkinter as ctk

app = ctk.CTk()

my_label = ctk.CTkLabel(app, text="Hello World!", bg_color="green")
my_label.place(x=10, y=10)

app.mainloop()

在此处输入图片描述

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章