You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将MainWindow类的self.count变量传递到MyThread类的run()方法中

解决方案

核心逻辑是将需要的参数传递到MyThread实例中存储,再在run方法里调用实例属性即可,具体修改如下:

步骤1:修改MyThread类,增加参数接收逻辑

给__init__方法添加参数入参,将参数保存为实例属性,方便run方法调用:

class MyThread(QThread):   
    my_signal_1 = pyqtSignal(str)       
    # 增加count、上升时长、下降时长三个参数接收
    def __init__(self, count, up_duration, down_duration):
        super(MyThread, self).__init__()  
        self.count = count
        self.up_duration = up_duration
        self.down_duration = down_duration                    
   
    def run(self):       
        # 直接调用自身实例属性即可
        for i in range(1, int(self.count)):
            self.my_signal_1.emit(str(i))
            board.digital[8].write(1)
            board.digital[13].write(1)
            time.sleep(float(self.down_duration))
            board.digital[8].write(0)
            board.digital[13].write(0)
            time.sleep(float(self.up_duration))

步骤2:修改MainWindow中的线程启动逻辑

原有代码存在逻辑顺序错误:先启动线程再读取参数,会导致线程启动后参数还没传递直接报错,需要调整为「先读参数→再给线程传参→最后启动线程」,推荐以下实现方式:

class MainWindow(QtWidgets.QMainWindow):    
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.label.setText('目前次數')
        self.ui.pushButton.setText("Start")
        self.ui.pushButton_2.setText("Stop")
        self.ui.lineEdit.setText("1")
        self.ui.label_2.setText("打點次數")
        self.ui.label_3.setText("上升持續時間")
        self.ui.lineEdit_2.setText("1")
        self.ui.lineEdit_3.setText("1")
        self.ui.label_4.setText("下降持續時間")
        self.ui.lineEdit_4.setText(Communication_start)
        self.ui.toolBar.setWindowTitle("toolBar")
        self.ui.pushButton.clicked.connect(self.buttonClicked)
        self.ui.pushButton_2.clicked.connect(self.buttonClicked2)          
        # 这里不需要提前实例化线程,点击Start时再创建即可
      
    def buttonClicked(self):                     
        # 1. 先读取所有配置参数
        count = int(self.ui.lineEdit.text())
        self.count = count
        up_duration = self.ui.lineEdit_2.text()
        down_duration = self.ui.lineEdit_3.text()
        # 2. 将参数传入线程实例初始化
        self.my_thread = MyThread(count, up_duration, down_duration)
        self.my_thread.my_signal_1.connect(self.set_lcdNumber_func)
        # 3. 最后启动线程
        self.my_thread.start()
      
    def buttonClicked2(self):
        self.ui.lineEdit_4.setText(Communication_close)
        board.exit()
      
    def set_lcdNumber_func(self, num):   
        self.ui.lcdNumber.display(num)     

内容的提问来源于stack exchange,提问作者CHL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:36:03