在PyQT5窗口和对话框之间共享SQlite数据库

时间:2016-04-28 11:09:55

标签: python sqlite pyqt5

我正在为我的论文做一个应用程序。这个应用程序将excel spreadhseet导入sqlite数据库并使用它。由于我不打算创建GUI,我使用了python中的sqlite3库并创建了一个巨大的库来处理它。但是现在我已经在PyQT 5中创建了一个GUI,我遇到了问题。

首先,快速提问,我不知道这是否是处理对话框的正确方法。我现在的方式是:

class Main_window(QtWidgets.QMainWindow, main_window.Ui_MainWindow):
    def __init__(self....):
        ...
    def showresultswindow(self):
        if results_window != None:
             results_window = Results_Window(self)

class Results_window(QtWidgets.QMainWindow, results_window.Ui_MainWindow):
    def __init__(self, parent):
        ...

当它们只需要读取数据库时,它就可以工作,对话框打开并按预期工作。但现在我正在写一个对话框来写入数据库,我无法让它工作。

应用程序的主窗口有两个显示数据库的QSqlTableModels。为了将数据写入数据库,我所做的是:

  • 主窗口类关闭与QtSql库一起使用的数据库
  • 主窗口调用一个函数,该函数使用sqlite3打开数据库,写入要写的任何内容,然后关闭它
  • 当函数完成时,主窗口类重新打开数据库并使用新数据再次填充QSqlTableModels。

但是当我创建对话框来编写数据时,我无法遵循该过程。当对话框在另一个线程中打开时,如果我关闭数据库,创建对话框然后打开它,在接受对话框并且必须写入数据时,数据库将被锁定。

我想过,只要对话框打开就会创建一个while循环,但它会挂起软件(无限循环时往往会这样做)。

我知道正确的应用程序方法是使用qtsql库来处理所有数据库输入和输出,但我必须重写一个长库,我更喜欢尝试另一个选项。即使这样做,我也不知道该怎么做:

  • 将QSqlQuery对象传递给对话框并使用它吗?
  • 将QSqlDatabase对象传递给对话框?

非常感谢您的帮助!

0 个答案:

没有答案