环境:Win10、Python3.7、Pyqt5 5.15
网络上pyqt5比较细节的使用说明并不太多,只能边使用边试错
由于是事后想起来记录一下,只好先记录目前碰到还有些印象几个点:
要确认和Pyqt5各个窗体结构之间的槽执行关系,确认信号绑定的方式
网上找的信息说是可以通过信号去激活信号,具体没测试过各种条件下的情况,目前只清楚如下使用方法会出现错误
错误使用:
这个情况下,QtObjectB 的 信号B-1 没法通过激活 信号A-1 去让 QtObjectA 执行功能A-1。只能让 信号B-1 直接连接 功能A-1 才能正常使用;
能够成功使用的其中一个方式:
这里这个估计是python执行的问题;
具体情况:
使用的PyCharm开发,Debug时没有出现问题,但Run的时候执行个别新增 QtThread 的功能时程序闪退,后台显示错误 -1073740791 (0xC0000409),没有任何其它信息。
因为Debug的时候不会出现问题,只能在每句话上print一下看是在哪里出错的,最后发现是在启动并运行子线程的时候出错;
我写了个新的简易类IOThread继承QtThread,主要是承接一些IO任务,我这边新建以及执行在一条语句中表述,没有命名变量去承接:
def IOFunc(*arg, **karg): #function pass Class IOThread(QtThread) def __init__ (self, func, *arg, **karg): self.func = func self.arg = arg self.karg = karg def run(self) self.func(*self.arg, **self.karg) Class ObjectA(QtObject): ... def FuncA(self): ... IOThread(IOFunc, *Targ, **Tkarg).start() # 此写法在PyCharm Run会出错,写的程序会报错闪退 ... def FuncB(self): ... temp = IOThread(IOFunc, *Targ, **Tkarg) temp.start() # 此写法在PyCharm Run会出错,写的程序会报错闪退 ... def FuncC(self): ... while True: #IOThread(IOFunc).start() # 此写法在PyCharm Run会出错,写的程序会报错闪退 temp = IOThread(IOFunc, *Targ, **Tkarg) temp.start() # 此写法在PyCharm Run不会出错 ... def FuncD(self): ... self.temp = IOThread(IOFunc, *Targ, **Tkarg) self.temp.start() # 此写法在PyCharm Run不会出错 ... ...
根据上述情况判断,应该是python Run编译代码的时候新建了QtThread然后以为用完了,结束函数的时候回收内存,导致出错。需要手动让它在函数内保持;FuncC是表示如果一个子线程的任务是管理、新建线程,可以允许局部变量的方式保持。
暂时有印象的是以上这些 2022年2月18日。



