TkInter __init__ говорит, что глобальная переменная не существует - PullRequest
0 голосов
/ 12 марта 2020

Идея в том, что Label должна получать текст из основной программы, но даже если VS C говорит, что в коде нет проблем, когда я нажимаю 'run', он вылетает.

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:\Dropbox\program\main.py", line 18, in <module>
    result = results()
  File "d:\Dropbox\program\interface\results.py", line 59, in __init__
    self.labelShowClass.configure(text=Class)
NameError: name 'Class' is not defined

1 Ответ

1 голос
/ 12 марта 2020

Для будущего меня и / или других людей, которые могут столкнуться с той же проблемой:

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

Нет необходимости создавать переменные, просто измените интерфейс непосредственно в функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...