Pergunta

Eu notei que quando a função setModel é executado em linha paralela ( tentei threading.Timer ou threading.thread), fico com esta:

QObject: Cannot create children for a parent that is in a different thread.
(Parent is QHeaderView(0x1c93ed0), parent's thread is QThread(0xb179c0), current thread is QThread(0x23dce38)
QObject::startTimer: timers cannot be started from another thread
QObject: Cannot create children for a parent that is in a different thread.
(Parent is QTreeView(0xc65060), parent's thread is QThread(0xb179c0), current thread is QThread(0x23dce38)
QObject::startTimer: timers cannot be started from another thread

Existe alguma maneira de resolver isso?

Foi útil?

Solução

Na verdade, é um fato da vida que o uso de vários segmentos da Qt (e outras estruturas ricas) é um trabalho delicado e difícil, exigindo atenção e cuidados explícita - veja docs do Qt para uma excelente cobertura do assunto (para os leitores experientes em enfiar em geral, com leituras sugeridas para aqueles que ainda não são).

Se você puder, eu gostaria de sugerir o que eu sempre sugerir como a arquitetura mais sólida para rosqueamento em Python: deixar que cada subsistema de ser propriedade e usados ??por um único segmento dedicado; comunicar entre threads através de instâncias de Queue.Queue, ou seja, pela passagem de mensagens. Esta abordagem pode ser um pouco restritivo, mas fornece uma boa base sobre a qual especificamente identificados e exceções (com base em pools de threads cuidadosamente arquitetado, ocasionais novos tópicos a ser gerado, fechaduras, variáveis ??de condição, e outras coisas que tais mimado ;-). Nesta última categoria também gostaria de classificar as coisas específicas do Qt como cross-thread comunicação de sinal / slot via conexões em fila .

Outras dicas

Parece que você perplexo sobre uma limitação Qt lá. Tente usar sinais ou eventos se precisar de objetos para se comunicar entre threads.

Ou pedir ao povo Qt sobre isso. Não parece específico para PyQt.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top