PyQt4を使用してGUIプログラムを作成しています。メインウィンドウにボタンがあり、このボタンをクリックします。processing.Processから派生したクラスのインスタンスであるバックグラウンドプロセスを起動したいと思います。
class BackgroundTask(processing.Process):
def __init__(self, input):
processing.Process.__init__(self)
...
def run(self):
...
( http://code.google.com/p/python-multiprocessing/から取得したpython-multiprocessingのPython2.5ポートを使用していることに注意して ください 。これが、multiprocessing.Processではなくprocessing.Processである理由です。これは違いを生むべきではありません。私は正しいですか?)
ボタンクリック信号に接続されているコードは、次のようなものです。
processing.freezeSupport()
task = BackgroundTask(input)
task.start()
プログラムは、Pythonインタープリターの下で期待どおりに動作します。つまり、コマンドライン「pythonmyapp.py」から起動した場合です。
ただし、py2exeを使用してプログラムをパッケージ化した後、そのボタンをクリックするたびに、バックグラウンドタスクを開始する代わりに、メインウィンドウのコピーがポップアップ表示されます。この動作の理由はわかりません。http://docs.python.org/library/multiprocessing.html#multiprocessing-programmingでアドレス指定された次のメモに関連していると思い ます
「このパッケージ内の機能には、メインメソッドが子によってインポート可能である必要があります。これはプログラミングガイドラインでカバーされていますが、ここで指摘する価値があります。これは、マルチプロセッシングなどの一部の例を意味します。プールの例は、インタラクティブインタープリターでは機能しません。 「」
name == " main "の場合、私が持っている唯一の場所は、典型的なpyqtプログラムのようにメインモジュールにあります
if __name__ == "__main__":
a = QApplication(sys.argv)
QObject.connect(a,SIGNAL("lastWindowClosed()"),a,SLOT("quit()"))
w = MainWindow()
w.show()
a.exec_()
この問題を解決する方法に関する解決策はありますか?ありがとう!