2013-05-15 31 views
2

在我的(Py)Qt4應用程序中,直到用戶使用命令選項卡切換離開應用程序然後命令選項卡切換回主窗口。Qt:MainWindow在應用程序被手動激活之前不會出現

奇怪的是,這個問題只有在Finder中雙擊我的.app文件時纔會顯示。如果我從命令行啓動應用程序,它可以正常工作

另外,我嘗試添加以下行到我的代碼,但似乎沒有這樣的伎倆:

mainWindow.show() 
mainWindow.raise_() 
mainWindow.repaint() 
QApplication.postEvent(QEvent.ApplicationDeactivate) 
QApplication.postEvent(QEvent.ApplicationActivate) 
QApplication.instance().processEvents() 

我想,也許這在某種程度上線程相關的問題,但我可以插入這條線幾乎任何地方:

assert threading.current_thread().name == "MainThread" 

最後一個問題:我不知道它是否有關,但我閃屏不能正確隱藏自身(儘管調用splashscreen.finish(mainWindow))。 (如果我完全註釋掉啓動畫面,主窗口仍然如上所述出現異常。)

爲什麼我的應用程序包的行爲與從命令行啓動不同?任何想法如何我可以診斷這個?我使用py2app來生成我的應用程序包。

編輯:這個郵件列表項目explains的問題,給出了一個最小的測試用例。 SPOILER:事實證明argv_emulation選項是問題所在。它不應該與GUI應用程序一起使用。

回答

1

你應該可以通過在你的主窗口上調用show()和raise_()來解決這個問題。

IIRC,你需要兩個,你可能需要它們。這適用於ubuntuone控制面板應用程序,它是PyQt並使用py2app打包。

有對答案更多的背景信息,以這種重複的問題:Why does my PyQt application open in the background on Mac OS X?

+0

感謝您的回覆。我已經調用show()和raise_()(按照該順序 - 只是更新了我的帖子以反映這一點,謝謝)。我已經看到了你剛剛鏈接到的SO答案,我不認爲我有完全相同的問題。這裏的關鍵是我的應用程序在從命令行啓動時的行爲*正確*,但從應用程序包啓動時行爲不當。我完全不解。 –

1

我有同樣的問題,我發現的bug並沒有明顯的32位雪豹系統,但完全相同的py2app束展出關閉argv_emulation沒有解決我的問題,在64位獅子和山獅的問題。

(我的應用程序無法以其他方式,而不是推出)。

我的快速和骯髒的解決辦法:在調用show()後,添加一個調用,比如:

os.system("open -a /path/to/your.app") 

在OS X上,這基本上等同於激活通過其停靠圖標(運行)的應用程序;主窗口立即出現。

相關問題