2015-08-26 10 views
1

Я пытаюсь испускают Сингаль из QThread обновить progressBarTypeError: 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) 

И как я это называю в MainWindow

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) 

 Смежные вопросы

  • Нет связанных вопросов^_^