0

I recently started learning Threads in PyQT5 and ran into the problem of changing the Label's text in Main class from Thread. I read about pyqtSignal ans pyqtSlot but nothing in my programm works. Sorry for my bad english btw :/// So I tried to make a timer that will output a value to QLabel, but got only TypeError: native Qt signal is not callable

`

import time
import sqlite3
import sys
from random import choice
from TheGame import Ui_MainWindow
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5.QtCore import *

from main import START_PLAYERS_COUNT, pl_names


class Worker(QThread):
    def __init__(self, sec):
        QThread.__init__(self)
        self.seconds = sec
        self.message = pyqtSignal(str)

    def run(self):
        self.sec = self.seconds
        self.message.emit(self.seconds)
        time.sleep(1)
        for i in range(self.sec):
            self.seconds -= 1
            self.message.emit(self.seconds)
            time.sleep(1)
        print('ok')


class MainGame(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()
        self.rounds()

    def rounds(self):
        self.quests = []
        self.thread = QThread(self)
        self.worker = Worker(10)
        self.worker.moveToThread(self.thread)
        self.worker.message(self.text)
        self.thread.start()

    def text(self, seconds):
        self.time_num.setText(seconds)


def except_hook(cls, exception, traceback):
    sys.__excepthook__(cls, exception, traceback)


players_results = {}
for i in pl_names:
    players_results[i] = int(), int(), int()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    form = MainGame()
    form.show()
    sys.excepthook = except_hook
    sys.exit(app.exec())

`

Platon
  • 1

0 Answers0