Hellbea
Hellbea

Reputation: 299

Send data to Qthread when in have changes in GUI windows pyqt5

Hi i have Qthread which have to wait some minutes which user input from MainWindow the some Qthread code

class Worker(QThread):
  list_of_dict_signals = pyqtSignal(list)
  def __init__(self):
    QThread.__init__(self)
    self.running = False

  def run(self):
    self.running = True
    while self.running:
        info = self.check_info()
        print(info)
        self.list_of_dict_signals.emit(info)
        self.sleep(value that user have to input in main window)

Some code of main window:

class MyWin(QtWidgets.QMainWindow):
  def __init__(self, parent=None):
    QtWidgets.QWidget.__init__(self, parent)
    self.ui = Ui_MainWindow()
    self.ui.setupUi(self)
    self.myworker = Worker()
    self.myworker.list_of_dict_signals.connect(self.onDataFromThread)

    self.ui.pushButton.clicked.connect(self.on_start)
    self.ui.pushButton_2.clicked.connect(self.on_stop)




  def on_start(self):
    if not self.myworker.isRunning():
        #need to send data from self.ui.spinBox.value() each time when user press start
        self.myworker.start()

Thx

Upvotes: 0

Views: 408

Answers (1)

eyllanesc
eyllanesc

Reputation: 244282

The simplest option is to create a function that updates the sleep time:

Thread:

class Worker(QThread):
    list_of_dict_signals = pyqtSignal(list)
    def __init__(self):
        QThread.__init__(self)
        self.running = False
        self.time_sleep = 0.1 # default value

    def setTime(self, val):
        self.time_sleep = val

    def run(self):
        ...
        self.sleep(self.time_sleep)

GUI:

class MyWin(QtWidgets.QMainWindow):
    ...

    def on_start(self):
        if not self.myworker.isRunning():
            self.myworker.setTime(self.ui.spinBox.value())
            self.myworker.start()

Upvotes: 1

Related Questions