@KuYAr
Тут ничего нет

Почему выдает ошибку UnboundLocalError: local variable 'a' referenced before assignment?

Выдает ошибку:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.9_3.9.1520.0_x64__qbz5n2kfra8p0\lib\tkinter\__init__.py", line 1892, in __call__
return self.func(*args)
File "C:\Users\User\Documents\Python\1.py", line 72, in one
if a==12345:
UnboundLocalError: local variable 'a' referenced before assignment

import tkinter as tk
global a
global b
a=12345
b=12345
class Application(tk.Frame):

    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.create_widgets()

    def create_widgets(self):
        self.hi_there = tk.Button(self)
        self.hi_there["text"] = '1'
        self.hi_there["command"] = self.one
        self.hi_there.pack(side="top")
        self.hi_there = tk.Button(self)
        self.hi_there["text"] = '2'
        self.hi_there["command"] = self.two
        self.hi_there.pack(side="top")
        self.hi_there = tk.Button(self)
        self.hi_there["text"] = '3'
        self.hi_there["command"] = self.three
        self.hi_there.pack(side="top")
        self.hi_there = tk.Button(self)
        self.hi_there["text"] = '4'
        self.hi_there["command"] = self.four
        self.hi_there.pack(side="top")
        self.hi_there = tk.Button(self)
        self.hi_there["text"] = '5'
        self.hi_there["command"] = self.five
        self.hi_there.pack(side="top")
        self.hi_there = tk.Button(self)
        self.hi_there["text"] = '6'
        self.hi_there["command"] = self.six
        self.hi_there.pack(side="top")
        self.hi_there = tk.Button(self)
        self.hi_there["text"] = '7'
        self.hi_there["command"] = self.seven
        self.hi_there.pack(side="top")
        self.hi_there = tk.Button(self)
        self.hi_there["text"] = '8'
        self.hi_there["command"] = self.eight
        self.hi_there.pack(side="top")
        self.hi_there = tk.Button(self)
        self.hi_there["text"] = '9'
        self.hi_there["command"] = self.nine
        self.hi_there.pack(side="top")
        self.hi_there = tk.Button(self)
        self.hi_there["text"] = '0'
        self.hi_there["command"] = self.null
        self.hi_there.pack(side="top")
        self.hi_there = tk.Button(self)
        self.hi_there["text"] = '+'
        self.hi_there["command"] = self.add
        self.hi_there.pack(side="top")
        self.hi_there = tk.Button(self)
        self.hi_there["text"] = '-'
        self.hi_there["command"] = self.subs
        self.hi_there.pack(side="top")



        self.quit = tk.Button(self, text="STOP", fg="red",
                              command=self.master.destroy)
        self.quit.pack(side="bottom")

    def one(self):
        print("1")
        if a==12345:
            a=1
        else:
            b=1
            
    def two(self):
        print("2")
        if a==12345:
            a=2
        else:
            b=2
        
    def three(self):
        print("3")
        if a==12345:
            a=3
        else:
            b=3
        
    def four(self):
        print("4")
        if a==12345:
            a=4
        else:
            b=4
        
    def five(self):
        print("5")
        if a==12345:
            a=5
        else:
            b=5
        
    def six(self):
        print("6")
        if a==12345:
            a=6
        else:
            b=6
        
    def seven(self):
        print("7")
        if a==12345:
            a=7
        else:
            b=7
            
    def eight(self):
        print("8")
        if a==12345:
            a=8
        else:

            b=8
    def nine(self):
        print("9")
        if a==12345:
            a=9
        else:
            b=9
        
    def null(self):
        print("0")
        if a==12345:
            a=0
        else:
            b=0
        
    def add(self):
        print("+")
        print("RESULT:", int(a)+int(b))
        
    def subs(self):
        print("-")
        print("RESULT:", int(a)-int(b))
        
root = tk.Tk()
app = Application(master=root)
app.mainloop()
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ответы на вопрос 2
Bad-Coder
@Bad-Coder
Не новичок, а тупой...
создайте переменную в классе, и изменяйте или читайте её через self. Можете сделать global но знайте, глобальные переменные плохие.
Пример:
class App:
    a = 123
    b = 123
    def change(self, a, b):
        self.a = a
        self.b = b
    def printAB(self):
        print(self.a, self.b)
X = App()
X.change(1, 1)
X.printAB()
# >>> 1, 1
Y = App()
Y.printAB()
# >>> 123, 123

В вашем случае:
class App:
    a = 123
    def isAEquals(self, Equals):
        if self.a == Equals:
            return True
        if self.a != Equals:
            return False
Z = App()
print(Z.isAEquals(123)) 
# >>> True
J = App()
print(J.isAEquals(1234))
# >>> False
Ответ написан
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Во-первых, global a надо объявлять в той области видимости, в которой вы хотите видеть глобальную переменную.
Во-вторых, видите, как легко накосячить с глобальными переменными? Ещё не начали, уже ошибки.
Не связывайтесь с ними. Передавайте в функцию и возвращайте из функции нужные переменные и значения.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
24 июн. 2021, в 22:38
300 руб./за проект
24 июн. 2021, в 22:05
5000 руб./за проект
24 июн. 2021, в 22:00
5000 руб./за проект