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的行编辑文本却不能以相同的方式工作?)谢谢!