sqlite 如何将变量从一个类导入到另一个文件中的另一个类

kcugc4gi  于 2023-05-18  发布在  SQLite
关注(0)|答案(1)|浏览(114)

我必须在tkinter中为我的学校项目做一个CRUD应用程序。到目前为止,我已经注册并登录了。现在我想从user.py中的类User中的类main.py中的类App中获取变量user_data。在“用户”窗口中显示用户数据。
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

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

我得到错误:AttributeError: module 'main' has no attribute 'user_data'

qxsslcnc

qxsslcnc1#

您可以简单地将user_data传递给User的示例,而不是使用全局变量。

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

相关问题