PyQt5 GUI закрывается без ошибки при работе с MySQL базой данных
Как подключить MySQL к PyQt5 приложению?
Да возможно это глупый вопрос, но я уже пару дней ломаю себе голову. Просто когда создаю обычную консольную программу и подключаюсь к своей локальной базе данных. Все хорошо, данные отображаются нормально, могу вносить данные, редактировать и т.д. (test1.py, на gist
).
Но когда вот уже подключаю эту же логику к обычному PyQt приложению он просто не работает, ни в консоли, ни где нет ошибки или предупреждений.
Сделал так, чтобы GUI сначала создалась, а затем добавил на кнопку метод извлечения данных из БД, но когда нажимаю кнопку GUI просто выключается и скрипт останавливается (test.py на gist)
test.py:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QVBoxLayout
from mysql.connector import connect, Error as MySQLError
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.label = QLabel('0')
self.button = QPushButton('Set text')
self.clear_btn = QPushButton('Clear')
layout = QVBoxLayout()
layout.addWidget(self.label)
layout.addWidget(self.button)
layout.addWidget(self.clear_btn)
self.setLayout(layout)
self.button.clicked.connect(self.setValue)
self.clear_btn.clicked.connect(self.clearValue)
self.setWindowTitle('My App')
self.resize(400, 300)
self.show()
def setValue(self):
try:
db = connect(
host='localhost',
user='root',
password='root',
database='mudule2'
)
cursor = db.cursor()
cursor.execute('SELECT * FROM clients')
clients = cursor.fetchall()
print(clients)
except MySQLError as e:
self.label.setText(f"Error: {e}")
print(f"Error: {e}")
def clearValue(self):
self.label.setText('0')
def gui():
app = QApplication(sys.argv)
window = MyWindow()
sys.exit(app.exec_())
def test_db():
try:
db = connect(
host='localhost',
user='root',
password='root',
database='mudule2'
)
cursor = db.cursor()
cursor.execute('SELECT * FROM clients')
clients = cursor.fetchall()
print(clients)
except MySQLError as e:
print(f"Error: {e}")
except Exception as e:
print(f"Error: {e}")
if __name__ == '__main__':
gui()
Gist: https://gist.github.com/IndiMops/3aebb052963b26c8938c53033b1d8548
Так возможно, я чего-то не догоняю, поэтому я и пришел к вам на помощь.
Спасибо за ваши ответы и объяснения наперед.