Окно Traitsui/pyface не отображается в методе угрозы

Мне нужно отобразить сообщение об ошибке в случае возникновения исключения в запущенном мною потоке. Моя проблема в том, что сообщение не отображается, даже если кажется, что оно каким-то образом создано; главное окно зависает, пока я не нажму Enter, чтобы "отклонить" сообщение об ошибке.

Следующий фрагмент кода - это упрощенная версия моего реального кода, иллюстрирующая проблему.

import threading
from traits.api import *
from traitsui.api import *

from pyface.api import error


class Main(HasTraits):

    go=Button("GO")
    
    traits_view = View(Item("go"))
    
    error = Str("") 
    
    def _go_fired(self):
    
        thread = threading.Thread(target=self.go_exec)
        thread.start()


    def go_exec(self):
    
        try:
        
            # here i need to execute some code than can produce an 
            raise Exception("error")

        except Exception as ex:
            self.error=ex.args[0]
                
    def _error_changed(self):
        error(None, self.error)
        
m=Main()
m.configure_traits()

В конце я получаю это сообщение

QBasicTimer::start: Timers cannot be started from another thread
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QApplication(0x7ff5ffc03630), parent's thread is QThread(0x7ff5ffe8a7f0), current thread is QThread(0x7ff602034060)

Как я могу "заставить" появиться сообщение?

Спасибо заранее за любую помощь!

0 ответов

Другие вопросы по тегам