PyQt5中QThread与数据库操作的结合实例
发布时间:2023-12-26 19:50:17
在PyQt5中,可以使用QThread来进行线程的创建和管理,并通过线程进行数据库的操作。下面是一个使用PyQt5的QThread与数据库操作结合的实例,并附带使用例子。
在这个实例中,我们将创建一个用于查询数据库的线程,并通过线程来搜索数据库中的数据。具体步骤如下:
1. 导入必要的模块:
import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QHBoxLayout, QVBoxLayout, QPushButton, QLabel, QLineEdit, QTextEdit from PyQt5.QtCore import QThread from PyQt5.QtSql import QSqlDatabase, QSqlQuery
2. 创建一个自定义的线程类,用于执行数据库操作:
class DatabaseThread(QThread):
def __init__(self, query_str):
super().__init__()
self.query_str = query_str
def run(self):
db = QSqlDatabase.addDatabase('QMYSQL')
db.setHostName('localhost')
db.setDatabaseName('test')
db.setUserName('root')
db.setPassword('password')
if db.open():
query = QSqlQuery()
query.exec_(self.query_str)
result = ""
while query.next():
result += query.value(0) + "
"
self.result.emit(result)
else:
self.result.emit("Failed to connect to database.")
3. 创建一个主窗口类,用于显示用户界面和处理用户输入:
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Database Search")
self.setGeometry(100, 100, 500, 400)
layout = QVBoxLayout()
search_layout = QHBoxLayout()
self.search_label = QLabel("Search:")
self.search_lineedit = QLineEdit()
self.search_button = QPushButton("Search")
self.search_button.clicked.connect(self.search_button_clicked)
search_layout.addWidget(self.search_label)
search_layout.addWidget(self.search_lineedit)
search_layout.addWidget(self.search_button)
layout.addLayout(search_layout)
self.result_textedit = QTextEdit()
layout.addWidget(self.result_textedit)
central_widget = QWidget()
central_widget.setLayout(layout)
self.setCentralWidget(central_widget)
def search_button_clicked(self):
query_str = "SELECT name FROM users WHERE name LIKE '%{0}%'".format(self.search_lineedit.text())
self.thread = DatabaseThread(query_str)
self.thread.result.connect(self.show_result)
self.thread.start()
def show_result(self, result):
self.result_textedit.setText(result)
4. 创建一个应用程序对象,并在应用程序中创建主窗口:
if __name__ == "__main__":
app = QApplication(sys.argv)
db = QSqlDatabase.addDatabase('QMYSQL')
db.setHostName('localhost')
db.setDatabaseName('test')
db.setUserName('root')
db.setPassword('password')
if not db.open():
print("Failed to connect to database.")
sys.exit()
main_window = MainWindow()
main_window.show()
sys.exit(app.exec_())
这个例子中,首先导入了必要的模块,包括PyQt5的相关模块和QThread和QSql的类。然后创建了一个自定义的QThread子类,重写了run方法,在其中连接数据库,并执行查询操作。查询结果通过QThread的信号传递给主窗口类,主窗口类通过信号的槽函数显示查询结果。
运行以上代码,应用程序窗口会显示一个搜索框和一个搜索按钮。用户可以输入要搜索的关键字,并点击搜索按钮进行查询。查询结果将显示在应用程序窗口的文本框中。
以上就是使用PyQt5的QThread与数据库操作结合的实例,并附带使用例子的描述。你可以根据实际需求进行修改和扩展,以实现更复杂的功能。
