2015-08-26 425 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) 
相關問題