2015-04-01 33 views
3

在OS X,使用zetcode example for menubar,如果運行此命令行:PyQt的如何讓應用真正活躍

$ python menubar.py 

應用程序啓動,但在窗口堆棧的底部。這可以通過將 self.raise_()

修復爲代碼。

但是,該應用程序仍然不會立即生效。終端應用菜單欄仍然顯示,而不是pyqt菜單欄。

獲取pyqt菜單欄顯示的唯一方法是從pyqt應用程序或終端應用程序切換回來。

這是預期的行爲?無論如何要解決這個問題,以便pyqt應用程序立即生效,即pyqt菜單欄在執行時立即顯示。

版本:OS X 10.9,Qt的4.8.6,PyQt的4.11.3,SIP 4.16.5,蟒2.7.8

+0

您是否嘗試過[activateWindow()''(https://doc.qt.io/ QT-4.8/qwidget.html#activateWindow)?此外,如果您將應用程序作爲bg進程啓動,會發生什麼情況:例如'python menubar.py&'? – ekhumoro 2015-04-07 16:54:50

+0

請參閱下面的答案。什麼都沒有 – triccare 2015-04-08 14:45:02

回答

0

的相同問題會影響由PyInstaller捆綁某些應用。以下博客文章討論了修復,但是修復是以PyInstaller引導加載程序的形式進行的,它不會與您的代碼直接相關,但它可能是有用的。

http://dvitonis.net/blog/2015/01/07/menu-bar-not-visible-when-building-pyqt-app-bundle-pyinstaller-mac-osx-mavericks-yosemite/

的問題涉及到使用的是該鏈接的文章中討論TransformProcessType()的:

http://www.sheepsystems.com/developers_blog/TPT-show-menu.html

我不知道是什麼Qt的方法將涉及到Mac OS TransformProcessType( ),但是你可以嘗試在你的mainwindow的__init __()中調用QWidget.setWindowState()。

+1

我有一個與PyInstaller捆綁在一起的應用程序,在OS X Yosemite上有這個問題:啓動它時,它是最前面的窗口,但菜單欄仍然是終端,我必須點擊另一個應用程序,然後返回我的菜單欄生效。在my_main_window.show()調用之後,我嘗試了以下所有操作:my_main_window.activateWindow()和my_main_window.raise_()和my_main_window.setWindowState(Qt.WindowActive)。沒有任何影響。 – user405 2015-04-07 19:47:03

+1

使用setWindowState和各種WindowFlag設置不起作用。似乎沒有來自pyqt郵件列表本身的直接信息。所以,系統似乎是固有的,至少在OS X中是這樣。 – triccare 2015-04-08 14:42:07

+1

@triccare。 PyQt郵件列表中沒有太多內容發佈,除非有人讀到它,恰巧遇到了同樣的問題並發現了一個解決方案。這幾乎可以肯定是一個Qt特定的問題,所以你需要嘗試他們的bug追蹤器(儘管[QTBUG-28327](https://bugreports.qt.io/browse/QTBUG-28327)的當前狀態似乎沒有提供很多希望)。 – ekhumoro 2015-04-08 15:55:31

0

我遇到了這種情況,但只有當我用--nosplash選項啓動時才跳過我的應用程序中的啓動畫面。

這給了我一個提示,我開發了使用一個 '虛擬' 閃屏此變通辦法:

widget = QtGui.QMainWindow() # or whatever your main window class is 
dummy = QtGui.QSplashScreen() 
dummy.show() 
dummy.finish(widget) 
widget.show() 
widget.raise_() 
+0

謝謝。我會在不久的將來嘗試一下。 – triccare 2015-09-08 18:18:54