2013-05-11 9 views
5

Mam problemy z budowaniem aplikacji PySide Python za pomocą py2app (dla OS X). Wygląda na to, że coś dziwnego dzieje się z wątkami w pakiecie aplikacji.Aplikacja QApplication nie działa w głównym wątku podczas budowania pakietu aplikacji PySide za pomocą py2app

Oto minimalne przykład

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_() 

Kiedy uruchomić z wiersza poleceń: python test.py, to działa dobrze, bez błędów. Jednak kiedy następnie skompilować go z poniższej setup.py: pojawiają

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'], 
) 

te błędy w konsoli:

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) 

Wygląda więc na to, że aplikacja nie jest budowany na żywo w głównym wątku dowolny jeszcze. Wszelkie pomysły, jak to naprawić?

+0

Za to, co jest warte, nie mogę odtworzyć twojego problemu za pomocą PyQt4 (Qt-4.8.3, PyQt-4.9.5, OSX-10.7, Python-2.7.3, py2app -0,7.3). Być może ten problem dotyczy tylko użytkowników PySide? –

+0

To dziwne. Py2app nie tworzy wątków w pakiecie aplikacji. –

+0

BTW. Nie musisz importować Pyside do pliku setup.py. –

Odpowiedz

0

Problem wydaje się być sposobem w jaki PySide zarządza QThreads. Tworzysz QTimer z rodzicem jako QApplication. Podczas korzystania z PyQt4 nie jest to problemem, ale może być na PySide.

A QTimer również spawnuje QThread, więc spróbuj uruchomić swój kod bez tworzenia QTimer.

Uwaga: w momencie zadawania pytania może to być błąd. I może być naprawiony w ostatnich wersjach PySide. (Po prostu spekuluję: D)

Powiązane problemy