pyqt5 新建子进程时报错:TypeError: cannot pickle 'Ui_MainWindow' object
时间: 2023-07-02 09:04:18 浏览: 362
Python+PyQT5的子线程更新UI界面的实例
5星 · 资源好评率100%
这个错误通常是由于无法pickle(序列化)的对象被传递给子进程而导致的。在你的情况下,错误似乎是因为你正在尝试pickle一个Qt Designer生成的UI类对象,它不能被pickle。
解决这个问题的方法是创建一个可以被pickle的对象,而不是直接pickle UI类对象。你可以创建一个简单的Python类,将UI类作为一个成员变量,并将这个新类传递给子进程。在子进程中,你可以使用UI类对象来创建用户界面。
示例代码如下:
```python
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QProcess
from ui_mainwindow import Ui_MainWindow
class MainWindow():
def __init__(self):
self.ui = Ui_MainWindow()
if __name__ == '__main__':
app = QApplication([])
main_window = MainWindow()
process = QProcess()
process.start('python', ['child_process.py', str(main_window.ui)])
```
在子进程中,你可以这样获取UI类对象:
```python
import sys
from PyQt5.QtWidgets import QApplication
from ui_mainwindow import Ui_MainWindow
if __name__ == '__main__':
app = QApplication([])
ui = eval(sys.argv[1])
window = ui()
window.show()
sys.exit(app.exec_())
```
请注意,这只是一个示例代码,你需要根据你的具体情况进行修改。
阅读全文