2013-05-11 30 views
5

Tôi đang gặp sự cố khi xây dựng ứng dụng PySide Python bằng py2app (dành cho OS X). Có vẻ như điều gì đó vui nhộn xảy ra với các chuỗi trên gói ứng dụng.QApplication không chạy trong chủ đề chính khi xây dựng gói ứng dụng PySide với py2app

Dưới đây là ví dụ tối thiểu

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

Khi chạy từ dòng lệnh: python test.py, điều này hoạt động tốt mà không có lỗi. Tuy nhiên khi tôi sau đó biên dịch nó với setup.py sau:

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

các lỗi này xuất hiện trong 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) 

Vì vậy, có vẻ như App không được xây dựng để sống trong các chủ đề chính nào hơn. Bất kỳ ý tưởng làm thế nào để sửa lỗi này?

+0

Đối với những gì nó có giá trị, tôi không thể tái tạo vấn đề của bạn bằng cách sử dụng PyQt4 (Qt-4.8.3, PyQt-4.9.5, OSX-10.7, Python-2.7.3, py2app -0,7,3). Có lẽ vấn đề này chỉ ảnh hưởng đến người dùng PySide? –

+0

Thật lạ lùng. Py2app không tạo chủ đề trong gói ứng dụng. –

+0

BTW. Bạn không phải nhập Pyside trong tệp setup.py của mình. –

Trả lời

0

Vấn đề có vẻ là cách PySide quản lý QThreads. Bạn đang tạo một số QTimer với số QApplication làm cha mẹ. Khi sử dụng PyQt4 đó không phải là vấn đề, nhưng nó có thể là trên PySide.

A QTimer cũng sinh ra một số QThread vì vậy, hãy thử chạy mã của bạn mà không cần tạo QTimer.

Lưu ý: Vào thời điểm bạn đặt câu hỏi, đây có thể là lỗi. Và có thể được sửa trong các phiên bản trước của PySide. (Tôi chỉ suy đoán: D)

Các vấn đề liên quan