2015-08-26 386 views
1

我试图从QThread发出葛更新progressBar类型错误:PySide.QtCore.QObject.connect():没有足够的论据

class Signal(QtCore.QObject): 
    this = QtCore.Signal(int) 

class Load(QtCore.QThread): 
    def __init__(self, parent): 
      QtCore.QThread.__init__(self, parent) 
      self.parent = parent 
      self.onProgress = Signal() 

    def run(self): 
     ''' 
     ''' 
     stacks = [] 
     count = 100 
     for i in range(count): 
      # do something ... 
      self.onProgress.this.emit(count) 

我怎么称呼它在主窗口

def __init__(self ...): 
      ... 
      self.Thread = Load(self) 
      self.Thread.onProgress.connect(self.onProgress) 
      self.Thread.start() 

    @QtCore.Slot(int) 
    def onProgress(self, int): 
     self.ui.progressBar.setValue(self.ui.progressBar.value() + (90/int)) 

,但我总是得到这个错误

TypeError: PySide.QtCore.QObject.connect(): not enough arguments 

回答

1

你连接到onProgress,它是Signal类的一个实例(在此上下文中是一个误导性名称)。你想被连接到onProgress.this,这是实际的信号对象:

self.Thread.onProgress.this.connect(self.onProgress) 

或者分配给onProgress信号本身:

self.onProgress = Signal().this 
1

我真的不知道你正在尝试做的与this名称,但我不认为它会工作。你看过Signals and Slots in PySide?它有一个很好的描述。我想你只需要这样的东西:

class Load(QtCore.QThread): 

    onProgress = QtCore.Signal(int) 

    def __init__(self, parent): 
     QtCore.QThread.__init__(self, parent) 
     self.parent = parent 

    def run(self): 
     ''' 
     ''' 
     stacks = [] 
     count = 100 
     for i in range(count): 
      # do something ... 
      self.onProgress.emit(count) 
相关问题