解决PySide+Python子线程更新UI线程

在我开发的系统,需要子线程去运行,然后把运行的结果发给UI线程,让UI线程知道运行的进度。

首先创建线程很简单

def newThread(self):
    d = Data()
    print '子线程的运行'
t1 = threading.Thread(target=newThread)
t1.setDaemon(True)
t1.start()

之后我发现用子线程去调用UI线程是行不通的,只能通过信号和槽来实现,于是
首先,定义一个类,让他实现PySide.QtCore.QObject类

class Data(PySide.QtCore.QObject):  
    #定义信号
    mySignal = Signal()

    def __init__(self):  
        #这句话很重要
        super(Data, self).__init__()
    def run(self):
        mySignal.emit()

然后再把主线程的方法绑定到该槽上去

QtCore.QObject.connect(Data的实例,QtCore.SIGNAL('mySignal()'),'主线程的方法')

最后,就可以在子线程执行run方法的时候,就会调用UI线程的方法

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pyside 和 pymssql 是 Python 的两个库,分别用于 GUI 开发和数据库连接。 Pyside 是一个基于 Qt 框架的 Python GUI 库,可以用于开发跨平台的桌面应用程序。Pymssql 是一个 Python 连接 Microsoft SQL Server 数据库的库,可以方便地进行 SQL 查询和数据处理。 如果你需要开发一个基于 PySide 的桌面应用程序,并且需要连接 Microsoft SQL Server 数据库进行数据读写操作,可以使用这两个库进行开发。你需要先安装 PySide 和 pymssql 库,然后在代码中引入这两个库,进行 GUI 开发和数据库连接操作。以下是一个简单的示例代码: ```python import sys from PySide2.QtWidgets import QApplication, QMainWindow, QLabel, QLineEdit, QPushButton import pymssql class MainWindow(QMainWindow): def __init__(self): super().__init__() # 初始化 GUI 组件 self.label = QLabel(self) self.label.setText("请输入 SQL 查询语句:") self.label.move(10, 10) self.textbox = QLineEdit(self) self.textbox.move(10, 30) self.textbox.resize(280, 30) self.button = QPushButton('查询', self) self.button.move(10, 70) # 绑定按钮点击事件 self.button.clicked.connect(self.query) def query(self): # 获取 SQL 查询语句 sql = self.textbox.text() # 连接数据库 conn = pymssql.connect(server='localhost', user='username', password='password', database='database') # 执行 SQL 查询 cursor = conn.cursor() cursor.execute(sql) rows = cursor.fetchall() # 显示查询结果 result = "" for row in rows: result += str(row) + "\n" self.label.setText(result) if __name__ == '__main__': app = QApplication(sys.argv) window = MainWindow() window.setGeometry(100, 100, 300, 200) window.show() sys.exit(app.exec_()) ``` 这个示例程序包含一个文本框和一个按钮,用户可以输入 SQL 查询语句并点击按钮进行查询。程序使用 pymssql 库连接数据库,并执行用户输入的 SQL 查询语句。查询结果将显示在程序窗口中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值