QApplication не запускается в основном потоке при создании пакета приложений PySide с py2app

У меня проблемы со сборкой приложения PySide Python с использованием py2app (для OS X). Похоже, что-то смешное происходит с потоками в наборе приложений.

Вот минимальный пример

from PySide.QtCore import *
from PySide.QtGui import *
import sys

class App(QApplication):
    def __init__(self):
        QApplication.__init__(self, sys.argv, True)

        self.timer = QTimer(self)


if __name__=='__main__':
    app = App()
    app.exec_()

При запуске из командной строки: python test.py работает без ошибок. Однако, когда я затем скомпилирую его со следующим setup.py:

from setuptools import setup
import py2app
import PySide

APP = ['test.py']
DATA_FILES = []
OPTIONS = {'argv_emulation': False,
            'includes' : 'PySide',
            'resources' : "qt_menu.nib"
            }

setup(
    app=APP,
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    setup_requires=['py2app'],
)

эти ошибки появляются в консоли:

11/05/2013 13:54:20.958 [0x0-0xb37b37].org.pythonmac.unspecified.test: QObject: Cannot create children for a parent that is in a different thread.
11/05/2013 13:54:20.958 [0x0-0xb37b37].org.pythonmac.unspecified.test: (Parent is App(0x105f41f10), parent's thread is QThread(0x100106cc0), current thread is QThread(0x10251ea80)

Таким образом, похоже, что приложение больше не создается для работы в основном потоке. Любые идеи, как это исправить?


person Tim MB    schedule 11.05.2013    source источник
comment
Что бы это ни стоило, я не могу воспроизвести вашу проблему с помощью PyQt4 (Qt-4.8.3, PyQt-4.9.5, OSX-10.7, Python-2.7.3, py2app-0.7.3). Возможно, эта проблема затрагивает только пользователей PySide?   -  person Stuart Berg    schedule 15.05.2013
comment
Это странно. Py2app не создает потоки в пакете приложения.   -  person Ronald Oussoren    schedule 17.05.2013
comment
КСТАТИ. Вам не нужно импортировать Pyside в файл setup.py.   -  person Ronald Oussoren    schedule 17.05.2013
comment
Спасибо - странно. Также стоит упомянуть, что я использую MacPorts. У меня есть подозрение, что проблема может быть связана с зависимостью, которая установилась как для Python 3, так и для Python 2, хотя в сообщениях об ошибках не так много поддержки для этого.   -  person Tim MB    schedule 21.05.2013
comment
Да, при компиляции установки MacPorts друга этой проблемы нет — должно быть что-то забавное в моей установке.   -  person Tim MB    schedule 05.06.2013


Ответы (1)


Проблема, похоже, заключается в том, как PySide управляет QThreads. Вы создаете QTimer с QApplication в качестве родителя. При использовании PyQt4 это не проблема, но это может быть на PySide.

QTimer также порождает QThread, поэтому попробуйте запустить свой код, не создавая QTimer.

Примечание. В то время, когда вы задавали вопрос, это могло быть ошибкой. И может быть исправлено в последних версиях PySide. (Я просто предположил :D)

person Raydel Miranda    schedule 04.06.2014