在这种情况下,为什么tkinter不接受self=None?
给定:
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()。
你还把 text 和 bg 放错位置。
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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。
