TkInter的__init__说全局变量不存在



这个想法是Label应该从主程序中接收它的文本,但即使VSC说代码没有问题,当我点击"运行"时,它也会崩溃。

import sys
import tkinter as tk
import tkinter.ttk as ttk
class results:
def __init__(self, ):
global root, Class
root = tk.Tk()
root.geometry("819x503+471+148")
root.minsize(120, 1)
root.maxsize(3844, 1061)
root.resizable(1, 1)
root.title("Results")
root.configure(background="#d9d9d9")
root.configure(highlightbackground="#d9d9d9")
root.configure(highlightcolor="black")
_bgcolor = '#d9d9d9'  # X11 color: 'gray85'
_fgcolor = '#000000'  # X11 color: 'black'
_compcolor = '#d9d9d9' # X11 color: 'gray85'
_ana1color = '#d9d9d9' # X11 color: 'gray85'
_ana2color = '#ececec' # Closest X11 color: 'gray92'
font10 = "-family {Yu Mincho} -size 24 -slant italic"
font11 = "-family {Segoe UI} -size 13 -underline 1"
self.style = ttk.Style()
if sys.platform == "win32":
self.style.theme_use('winnative')
self.style.configure('.',background=_bgcolor)
self.style.configure('.',foreground=_fgcolor)
self.style.configure('.',font="TkDefaultFont")
self.style.map('.',background=
[('selected', _compcolor), ('active',_ana2color)])
self.TFrame1 = ttk.Frame(root)
self.TFrame1.place(relx=0.012, rely=0.02, relheight=0.96, relwidth=0.974)
self.TFrame1.configure(relief='groove')
self.TFrame1.configure(borderwidth="2")
self.TFrame1.configure(relief="groove")
self.TSubFrame1 = ttk.Frame(self.TFrame1)
self.TSubFrame1.place(relx=0.025, rely=0.248, relheight=0.59
, relwidth=0.296)
self.TSubFrame1.configure(relief='groove')
self.TSubFrame1.configure(borderwidth="2")
self.TSubFrame1.configure(relief="groove")
self.labelShowClass = ttk.Label(self.TSubFrame1)
self.labelShowClass.place(relx=0.042, rely=0.035, height=259, width=215)
self.labelShowClass.configure(background="#d9d9d9")
self.labelShowClass.configure(foreground="#000000")
self.labelShowClass.configure(font="TkDefaultFont")
self.labelShowClass.configure(relief="flat")
self.labelShowClass.configure(anchor='w')
self.labelShowClass.configure(justify='left')
self.labelShowClass.configure(text=Class) #Imma kms, why does it say it's not defined!?!?!
def recieveClasses(self, classes):
global Class
Class = classes
def start(self):
global root
root.mainloop()
def close(self):
global root
root.destroy()

main.py代码,调用对象:

from interface.results import results
result = results()
result.recieveClasses("test")
result.start()

错误消息说它不存在。问题是:如果我试图在init之外的任何其他方法中调用全局类,它会毫无问题地调用这个该死的变量。只有在init内部,它才会崩溃。

Traceback (most recent call last):
File "d:Dropboxprogrammain.py", line 18, in <module>
result = results()
File "d:Dropboxprograminterfaceresults.py", line 59, in __init__
self.labelShowClass.configure(text=Class)
NameError: name 'Class' is not defined

对于未来的我和/或其他碰巧遇到相同问题的人:

def recieveClasses(self, classes):
self.labelShowClass.configure(text=classes)

不需要创建任何变量,只需直接在函数上更改接口即可。

最新更新