Variablen zwischen Klassen übergeben
Verfasst: Freitag 7. Juli 2023, 13:53
Liebe Alle!
Bin neu hier - sorry falls das ein alter Hut ist....
Ich habe dabei folgendes Problem.
Ich öffne ein QT-Hauptfenster und darin sofort eine weiters login Fenster. Das Hauptfenster wird in einer Klasse "Frm_main" behandelt. Für das Login-Fenster wird eine eigene Klasse "Frm_login" erstellt.
In der Klasse "Frm_login" wird die Methode "Login" aufgerufen und dort werden die Login-Daten in das Login Fenster eingetragen. Anschließend wird abgefragt, ob der Login erfolgreich war und der Datenbank-connector mit dem Variablennamen "cnx" erstellt und bei erfolgreicher Anmeldung das Login-Fenster geschlossen
Durch einen Menüaufruf aus dem Hauptfenster soll nun testweise auf die Datenbank zugegriffen werden. Im Code geschieht das in der Methode "def schreibe_rohdaten(self):" Mein Problem ist nun folgendes: Wie kann ich aus dieser Methode auf den Inhalt der Variable "cnx" aus der Klasse "Frm_login" zugreifen um die Datenbankabfrage auszuführen. Natürlich sollen dann weitere Klassen mit unterschiedlichen Datenbankabfragen dazu kommen. aber dazu muss ich erst diese grundsätzliche Problem in den Griff bekommen.
......
Anbei der Code, wobei die kursiv geschriebenen Zeilen in "schreibe_rohdaten" die Fehlermeldung
cursor = cnx.cursor()
^^^^^^^^^^
AttributeError: 'bool' object has no attribute 'cursor'
produziert.
......
Wäre wirklich für Hilfe dankbar
----------
Code - keine Ahnung warum die Einrückungen verloren gehen..
----------
import sys
import mysql.connector
from mysql.connector import errorcode
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget
from Widgets.frm_main import Ui_MainWindow
from Widgets.frm_login import Ui_Frm_login
class Frm_main(QMainWindow, Ui_MainWindow, Ui_Frm_login):
def __init__(self):
super().__init__()
self.setupUi(self)
self.app = app
self.actionBeenden.triggered.connect(quit)
self.actionRohdaten.triggered.connect(self.schreibe_rohdaten)
def quit(self):
self.app(quit)
def schreibe_rohdaten(self):
query= f"SELECT * FROM loggerdaten"
cursor = cnx.cursor()
cursor.execute(query)
result = cursor.fetchall()
for r in result:
print(r)
class Frm_login(QWidget, Ui_Frm_login):
def __init__(self):
super().__init__()
self.setupUi(self)
self.quit_button.clicked.connect(self.abbrechen)
self.pushButton.clicked.connect(self.login)
def login(self):
ip = "xxx.xxx.xxx.xxx"
port = '3306'
database = 'database'
user = self.user.text()
password = self.password.text()
try:
cnx = mysql.connector.connect(user=user, password=password, host=ip, port=port, database=database)
self.close()
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
print("Something is wrong with your user name or password")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
print("Database does not exist")
else:
print(err)
def abbrechen(self):
self.close()
app = QApplication()
frm_main = Frm_main()
frm_login = Frm_login()
print(frm_login.login)
frm_main.show()
frm_login.show()
app.exec()
Bin neu hier - sorry falls das ein alter Hut ist....
Ich habe dabei folgendes Problem.
Ich öffne ein QT-Hauptfenster und darin sofort eine weiters login Fenster. Das Hauptfenster wird in einer Klasse "Frm_main" behandelt. Für das Login-Fenster wird eine eigene Klasse "Frm_login" erstellt.
In der Klasse "Frm_login" wird die Methode "Login" aufgerufen und dort werden die Login-Daten in das Login Fenster eingetragen. Anschließend wird abgefragt, ob der Login erfolgreich war und der Datenbank-connector mit dem Variablennamen "cnx" erstellt und bei erfolgreicher Anmeldung das Login-Fenster geschlossen
Durch einen Menüaufruf aus dem Hauptfenster soll nun testweise auf die Datenbank zugegriffen werden. Im Code geschieht das in der Methode "def schreibe_rohdaten(self):" Mein Problem ist nun folgendes: Wie kann ich aus dieser Methode auf den Inhalt der Variable "cnx" aus der Klasse "Frm_login" zugreifen um die Datenbankabfrage auszuführen. Natürlich sollen dann weitere Klassen mit unterschiedlichen Datenbankabfragen dazu kommen. aber dazu muss ich erst diese grundsätzliche Problem in den Griff bekommen.
......
Anbei der Code, wobei die kursiv geschriebenen Zeilen in "schreibe_rohdaten" die Fehlermeldung
cursor = cnx.cursor()
^^^^^^^^^^
AttributeError: 'bool' object has no attribute 'cursor'
produziert.
......
Wäre wirklich für Hilfe dankbar

----------
Code - keine Ahnung warum die Einrückungen verloren gehen..
----------
import sys
import mysql.connector
from mysql.connector import errorcode
from PySide6.QtWidgets import QApplication, QMainWindow, QWidget
from Widgets.frm_main import Ui_MainWindow
from Widgets.frm_login import Ui_Frm_login
class Frm_main(QMainWindow, Ui_MainWindow, Ui_Frm_login):
def __init__(self):
super().__init__()
self.setupUi(self)
self.app = app
self.actionBeenden.triggered.connect(quit)
self.actionRohdaten.triggered.connect(self.schreibe_rohdaten)
def quit(self):
self.app(quit)
def schreibe_rohdaten(self):
query= f"SELECT * FROM loggerdaten"
cursor = cnx.cursor()
cursor.execute(query)
result = cursor.fetchall()
for r in result:
print(r)
class Frm_login(QWidget, Ui_Frm_login):
def __init__(self):
super().__init__()
self.setupUi(self)
self.quit_button.clicked.connect(self.abbrechen)
self.pushButton.clicked.connect(self.login)
def login(self):
ip = "xxx.xxx.xxx.xxx"
port = '3306'
database = 'database'
user = self.user.text()
password = self.password.text()
try:
cnx = mysql.connector.connect(user=user, password=password, host=ip, port=port, database=database)
self.close()
except mysql.connector.Error as err:
if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:
print("Something is wrong with your user name or password")
elif err.errno == errorcode.ER_BAD_DB_ERROR:
print("Database does not exist")
else:
print(err)
def abbrechen(self):
self.close()
app = QApplication()
frm_main = Frm_main()
frm_login = Frm_login()
print(frm_login.login)
frm_main.show()
frm_login.show()
app.exec()