我正在写一个股票管理软件,它使用一个数据库来存储数据。我确实想反复进行查询,以保持界面的最新状态。此外,我希望在不同的线程中执行查询,以避免阻塞gui。你知道吗
到目前为止,我已经让GUI工作了,并且我将由sqlalchemy管理的查询移到了不同的线程中。GUI加载数据并由数据填充。遗憾的是,当我尝试重新查询和更新时,出现了错误SQLite objects created in a thread can only be used in that same thread
。你知道吗
def init_threads(self):
self.data_thread = QtCore.QThread()
self.mydata = Main_data()
self.mydata.moveToThread(self.data_thread)
self.data_thread.start()
self.mydata.getchemical_finished.connect(self.update_result)
def init_connections(self):
self.reset_btn.clicked.connect(self.mydata.getchemical)
class Main_data(QtCore.QObject):
getchemical_finished = QtCore.pyqtSignal()
def __init__(self):
super(QtCore.QObject, self).__init__()
self.engine = db.create_engine('data.db')
self.session = sessionmaker(bind=self.engine)()
@QtCore.pyqtSlot()
def getchemical(self, chemical_id=None, chemical_name=None):
if all(v is None for v in [chemical_id, chemical_name]):
self.mychemicals = self.session.query(Chemical).all()
elif chemical_name is not None:
self.mychemical = self.session.query(Chemical).filter(Chemical.name == chemical_name).first()
elif chemical_id is not None:
self.mychemical = self.session.query(Chemical).filter(Chemical.id == chemical_id).first()
self.getchemical_finished.emit()
我尝试使用sess=scoped\u会话(自我会话)在函数中得到化学物质,但这并没有改变任何东西。 我读过使用炼金术的书,但是我以前没有用过,我想知道,这是否是正确的方法?什么是最好和最有效的方法?为了实现对接口的更新,我会启动另一个线程,每x秒触发一次更新。你知道吗
~z~费边
目前没有回答
相关问题 更多 >
编程相关推荐