Найти - Пользователи
Полная версия: pyqlSignal has no attribute connect
Начало » GUI » pyqlSignal has no attribute connect
1
SHS
Сабж.
Не могу понять что не так.

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from Ui_form import *


class DoWebWork(QThread):


strSignal = pyqtSignal(str)
lblSignal = pyqtSignal(str)

def __init__(self, **args):
QThread.__init__(self)

def run(self):
self.myfunc()

def myfunc(self):
var1 = "Hello"
var2 = "Bye!"
self.strSignal.emit(var1)
self.lblSignal.emit(var2)


class MainForm(QMainWindow):


def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.ui = Ui_MainForm()
self.ui.setupUi(self)

def pushButton_OnClick(self):
t = Worker()
t.start()
Worker.strSignal.connect(self.addToCombo)
Worker.lblSignal.connect(self.setLabel)

@pyqtSlot()
def setLabel(self, strTxt):
self.ui.myLabel.setText(strTxt)

@pyqtSlot()
def addToCombo(self, strName):
self.ui.comboBox.addItem(strName)


if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
myapp = MainForm()
myapp.show()
sys.exit(app.exec_())
dimabest
1. метод pushButton_OnClick() заменить на:
    def pushButton_OnClick(self):
self.t = DoWebWork()
self.t.strSignal.connect(self.addToCombo)
self.t.lblSignal.connect(self.setLabel)
self.t.start()
На сигналы нужно сначала подписатся, и только потом запускать поток.
На объект потока должен кто-то ссылатся, иначе при выходе из метода pushButton_OnClick() он будет убит сборщиком мусора. Поэтому правильно self.t = DoWebWork() а не t = DoWebWork()

2. Заменить декораторы @pyqtSlot() на @pyqtSlot(str)
SHS
Благодарю. Работает.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB