如何将行编辑输入传递给另一个类PyQt

时间:2018-06-25 05:30:22

标签: multithreading pyqt arguments qlineedit qspinbox

from PyQt4 import QtGui,QtCore
#import PyQtDesign
import GUI4
#import GPIO stuff
import easydriver as ed

#Etc stuff
cw=False
stepper=ed.easydriver(12,0.004,32,18,11,22,33,35,0,'stepper')

class loop1(QtCore.QObject):
    def __init__(self,s_add): #passing s_add -- int(self.inp_add.text())
        super(loop1,self).__init__()
        self.s_add=s._add
        self.moving_forward=False
    def forward(self,s_add):
        stepper.set_direction(cw)
        self.moving_forward=True
        i=0
        while(self.moving_forward==True,i<s_add):
            stepper.step()
            i+=1
            print i
            QtGui.QApplication.processEvents()

class MainUiClass(QtGui.QMainWindow,GUI4.Ui_MainWindow():
    def __init__(self,parent=None):
        super(MainUiClass,self).__init__(parent):
        self.setupUi(self)
        self.Thread1=thread1()
        self.loop1=loop1(int(self.inp_add.text()) #self.inp_add is a line edit
        self.loop1.moveToThread(self.Thread1)

        self.btn_add.pressed.connect(self.Thread1.start)
        self.btn_add.pressed.connect(self.loop1.forward)

class thread1(QtCore.QThread):
    def run(self):
        self.exec_()

if __name__=='__main__':
    app=QtGui.QApplication(sys.argv)
    GUI=MainUiClass()
    GUI.show()
    app.exec_()

我希望代码允许某人在行编辑中输入数字,以修改当某人按下按钮时采取的“步数”。现在,我试图将行编辑文本作为int传递给在forward方法中使用的loop1类。目前,我收到错误消息:

TypeError:forward()恰好接受2个参数(给定1个参数)

这是我正在使用的表格,如果我传递的是Spinbox值,则可以正常工作,例如: (基于In PyQt, what is the best way to share data between the main window and a thread

....
class MainUiClass(QtGui.QMainWindow,GUI4.Ui_MainWindow():
    def __init__(self,parent=None):
        super(MainUiClass,self).__init__(parent):
        self.setupUi(self)
        self.Thread1=thread1(self.spn_add.value())

        self.spn_add.valueChanged.connect(self.Thread1.update)

class thread1(QtCore.QThread):
    def __init__(self,value):
        self.value=value
        super(thread1,self).__init__(parent)
    def run(self):
        ....
        while 1:
            time.sleep(1)
    def update(self,value):
        print value

if __name__=='__main__':
    app=QtGui.QApplication(sys.argv)
    GUI=MainUiClass()
    GUI.show()
    app.exec_()

两种代码都有不同的方法来进行多线程处理,但是在两种方法中,我都会得到相同的TypeError来将行编辑文本作为int传递给线程类。在这两种方法中,我都可以成功传递旋转框值。

如何将行编辑文本作为int传递给线程类中的方法? (这可能与主要问题有关,但是如何使用此方法可以传递旋转框值,但是作为int的行编辑文本却不能以相同的方式工作?)谢谢!

0 个答案:

没有答案