2013-05-11 14 views
5

Ho problemi a creare la mia app PySide Python usando py2app (per OS X). Sembra che qualcosa di divertente accade con i thread nel pacchetto dell'app.QApplicazione non è in esecuzione nel thread principale durante la creazione del pacchetto di app PySide con py2app

Ecco l'esempio minimo

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

quando viene eseguito da linea di comando: python test.py, questo funziona bene senza errori. Tuttavia quando ho quindi compilarlo con il seguente 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'], 
) 

questi errori vengono visualizzati nella console:

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) 

Così sembra che app non è in fase di costruzione a vivere nel thread principale qualsiasi Di Più. Qualche idea su come risolvere questo problema?

+0

Per quello che vale, non riesco a riprodurre il problema usando PyQt4 (Qt-4.8.3, PyQt-4.9.5, OSX-10.7, Python-2.7.3, py2app -0.7.3). Forse questo problema riguarda solo gli utenti di PySide? –

+0

È strano. Py2app non crea thread nel pacchetto di applicazioni. –

+0

BTW. Non devi importare Pyside nel tuo file setup.py. –

risposta

0

Il problema sembra essere il modo in cui PySide gestisce i QThreads. Stai creando un QTimer con un QApplication come genitore. Quando si utilizza PyQt4 non è un problema, ma potrebbe essere su PySide.

A QTimer inoltre genera uno QThread quindi, provare a eseguire il codice senza creare lo QTimer.

Nota: al momento della domanda, questo potrebbe essere un bug. E potrebbe essere risolto nelle ultime versioni di PySide. (Sto solo speculando: D)