Open XYZZ-404 opened 6 months ago
简单的复现代码:
`from win32com.client import Dispatch op = Dispatch("op.opsoft") import sys from PySide6.QtCore import QThread from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton
class WorkerThread(QThread):
def __init__(self): super().__init__() self.op = op def run(self): for i in range(100): cmp_color = self.op.CmpColor(0, 0, "ffffff", 1) self.op.Delay(1000) print(cmp_color) self.finished.emit()
class MainWindow(QWidget): def init(self): super().init() self.initUI()
def initUI(self): layout = QVBoxLayout() self.startButton = QPushButton('Start Thread', self) self.stopButton = QPushButton('Kill Thread', self) self.startButton.clicked.connect(self.startThread) self.stopButton.clicked.connect(self.killThread) layout.addWidget(self.startButton) layout.addWidget(self.stopButton) self.setLayout(layout) def startThread(self): print("Starting thread...") self.thread = WorkerThread() self.thread.start() def killThread(self): print("Killed thread...") self.thread.terminate()
if name == 'main': app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec())
` 这段代码在启动后,第一次启停线程时正常运行,第二次启动时,每次试图调用cmpcolor都会弹窗 目前测试结果,findcolor,cmpcolor,getcolor均会报错,而其他类别的函数如keypress等不会报错
使用的是Pycharm + python 3.12 64位, op-0.4.5 64位免注册版
刚才又测试了一下,在不使用terminate命令终止线程后,下次调用依然会出现一样的问题
使用deletelater()命令能够避免这个问题
简单的复现代码:
`from win32com.client import Dispatch op = Dispatch("op.opsoft") import sys from PySide6.QtCore import QThread from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton
class WorkerThread(QThread):
class MainWindow(QWidget): def init(self): super().init() self.initUI()
if name == 'main': app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec())
` 这段代码在启动后,第一次启停线程时正常运行,第二次启动时,每次试图调用cmpcolor都会弹窗 目前测试结果,findcolor,cmpcolor,getcolor均会报错,而其他类别的函数如keypress等不会报错