如何在qerrormessagebox中显示我的函数异常错误



我有这个程序,它用于从条形码读取器获取输入并将其保存到SQLite数据库。对于GUI部分,我使用PYQT5,并使用QThread和QObject进行多线程处理。我想使用它的是,如果在插入表时发生任何错误,我需要通过QerrorMessage在窗口中显示错误消息。

这是我的数据库连接和插入数据类

import sqlite3

class DBConnector():
def __init__(self) -> None:
self.conn = sqlite3.connect('inventory.db',timeout=10,check_same_thread=False)
self.cursor = self.conn.cursor()
self.init()

def init(self):
self.execute('PRAGMA foreign_keys=ON;')
self.execute('CREATE TABLE IF NOT EXISTS component(componentID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,component_name TEXT NOT NULL, UNIQUE(component_name));')
self.execute('CREATE TABLE IF NOT EXISTS componentdata(componentdataID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,serial TEXT NOT NULL,description TEXT NOT NULL,componentID INTEGER NOT NULL,FOREIGN KEY(componentID) REFERENCES component(componentID),UNIQUE(serial));')
self.execute('INSERT INTO component(component_name) VALUES("RAM"),("HARD DRIVE"),("POWER SUPPLY UNIT"),("MOTHERBOARD"),("PROCCESOR");')




def execute(self,query):
result = None
try:
result=self.cursor.execute(query)

self.conn.commit()
except sqlite3.Error as err:
print(err)
if result:
return result


这是为多重读取实现的Qthread类

from PyQt5.QtCore import (
QThread,
QObject,
pyqtSignal,
pyqtSlot
)
from PyQt5.QtWidgets import QErrorMessage

class WorkerSignals(QObject):
finished = pyqtSignal()
error = pyqtSignal(tuple)
result = pyqtSignal(object)
progress = pyqtSignal(int)

class Worker(QThread):
def __init__(self,fn,**kwargs):
super(Worker,self).__init__()
self.signals = WorkerSignals()
self.fn = fn
self.kwargs = kwargs

@pyqtSlot()
def run(self):
try:
self.fn(**self.kwargs)
except:
print('error occured')

这是我的窗口的pyqt5代码

class SubWindow(QWidget):
def __init__(self,windowtitle):
super().__init__()
self.setWindowTitle(windowtitle)
self.mainLayout = QVBoxLayout()


self.serial = myLayout(QHBoxLayout,'Serial Number')
self.description = myLayout(QHBoxLayout,'Description')  
self.cb = QComboBox(self)
self.mainLayout.addWidget(self.cb)
self.mainLayout.addLayout(self.serial.layout)
self.mainLayout.addLayout(self.description.layout)

self.dbc = DBConnector()
self.combo = self.dbc.execute("select * from component")
self.combolist = self.combo.fetchall()
for i in self.combolist:
self.cb.addItem(i[1])
self.savebutton = QPushButton("SAVE")
self.savebutton.clicked.connect(self.save)
self.mainLayout.addWidget(self.savebutton)

self.setLayout(self.mainLayout)        


def save(self):
ComponentID = self.dbc.execute("select componentID from component where component_name='%s'"%(self.cb.currentText())).fetchall()
ComponentID = ComponentID[0][0]
self.kwargs = {'query':"insert into componentdata(serial,description,componentID) values('%s','%s',%d)"%(self.serial.layoutLine.text(),self.description.layoutLine.text(),ComponentID)}
self.worker = Worker(self.dbc.execute,**self.kwargs)
# self.worker.finished.connect(self.succesmsg)
self.worker.finished.connect(self.close)
self.worker.start()

def succesmsg(self):
self.msg= QMessageBox()
self.msg.setWindowTitle("Status")
self.msg.setText("DONE")
self.msg.show()

这里试试这个!

def show_error(self):
error = "This is an Awesome Error :)"
em = QErrorMessage()
em.showMessage(error)

最新更新