@kamilm

Не могу обратиться к функции из другого потока.Что делать?

У меня есть класс Ui_Dialog в котором есть QTextEdit,
есть функция которая включает поток с ботом
self.Bot_Thread_instance = Bot_Thread(mainwindow=self)
self.On.clicked.connect(self.launch)
def launch(self):
    self.Bot_Thread_instance.start()

в коде ниже функция бота в другом потоке,в классе Bot_Thread(QtCore.QThread)
def run(self):
   Bot = vk.ChatBot(token = '', version_API = 5.101, group_id = '')
   Server = Bot.Auth()
   LongPoll = Bot.Listen()
   person = Bot.GetUserInfo()
   Server['ts'] = LongPoll['ts']
   while True:
        LongPoll = Bot.Listen()
        updates = LongPoll['updates']
        if updates: 
            for element in updates:
                action_code = element[0]
                if action_code == 4:
                    summands = []  
                    flag = element[2]
                    for number in [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 65536]:  
                        if flag & number:  
                            summands.append(number)
                    if 2 not in summands:
                        timestamp = element[4]
                        value = datetime.datetime.fromtimestamp(timestamp)
                        log = 'Сообщение от пользователя: %s\nid пользователя: %s\nДата отправки: %s\n' %(element[6], element[3], value.strftime("%Y-%m-%d %H.%M.%S"))
                        ui.Log.setText(log)
        Server['ts'] = LongPoll['ts']

мне надо чтобы log выводился в QTextEdit который находится в другом потоке,в классе Ui_Dialog.
на всякий случай ui = Ui_Dialog()
Ошибка
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QTextDocument(0x13402b01610), parent's thread is QThread(0x13402b00690), current thread is Bot_Thread(0x13402b02030)
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
tsarevfs
@tsarevfs
C++ developer
C UI в Qt можно работать только из одного потока. Чтобы безопасно общаться с UI из других потоков используйте сигналы.
https://stackoverflow.com/a/638693/1762922
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы