Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How I can import variable from one class to another class in another file

I have to make a CRUD app in tkinter for my school project.
I made sign up and login so far. Now i want to get variable user_data from class App in main.py in the class User in user.py. To display user data in User window.

main.py

from tkinter import *
from tkinter.messagebox import showerror
import sqlite3

db = sqlite3.connect("wypożyczalnia_aut.db")
cursor = db.cursor()

class App(Tk):
    def __init__(self):
        super().__init__()
        self.title("Zaloguj Się")
        self.geometry("300x400")

        login_font = ("Comic Sans MS", 20, "bold")

        Label(self, text="Zaloguj Się", font=login_font).pack(padx=10, pady=10)

        self.username = Entry(self)
        self.password = Entry(self, show="*")
        self.username.pack(padx=10, pady=10)
        self.password.pack(padx=10, pady=10)

        self.login_btn = Button(self,text="Zaloguj Się", command=self.login).pack(padx=10, pady=10)
        self.sign_up_btn = Button(self,text="Zarejestruj Się", command=self.open_window_sign_up).pack(padx=10, pady=10)

    def open_window_sign_up(self):
        from sign_up import SignUp
        sign_up_window = SignUp(self)
        sign_up_window.grab_set()
    
    def login(self):
        from user import User
        cursor.execute("SELECT * FROM uzytkownicy WHERE nazwa=? AND haslo=?", (self.username.get(), self.password.get()))
        global user_data
        user_data = cursor.fetchone()
        if user_data is not None:
            user_window = User(self)
            user_window.grab_set()
        else:
            showerror(title='Błąd',message='Niepoprawna Nazwa/Hasło')

        

if __name__ == "__main__":
    app = App()
    app.mainloop()

db.commit()
db.close()

user.py

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

from tkinter import *
import sqlite3
import main

class User(Toplevel):
    def __init__(self,parent):
        super().__init__(parent)
        self.geometry("1280x720")
        self.title("Panel Użytkownika")

        self.data = main.user_data

And im getting error: AttributeError: module 'main' has no attribute 'user_data'

>Solution :

You can simply pass user_data to instance of User instead of using global variable.

main.py
...
class App(Tk):
    ...
    def login(self):
        from user import User
        cursor.execute("SELECT * FROM uzytkownicy WHERE nazwa=? AND haslo=?", (self.username.get(), self.password.get()))
        #global user_data
        user_data = cursor.fetchone()
        if user_data is not None:
            user_window = User(self, user_data) # pass user_data to User
            user_window.grab_set()
        else:
            showerror(title='Blad',message='Niepoprawna Nazwa/Haslo')
...
user.py
class User(Toplevel):
    def __init__(self, parent, user_data):  # added argument user_data
        super().__init__(parent)
        self.geometry("1280x720")
        self.title("Panel Uzytkownika")

        self.data = user_data
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading