【问题标题】:Mac PyQt5 menubar not active until unfocusing-refocusing the appMac PyQt5 菜单栏在 unfocusing-refocusing 应用程序之前不活动
【发布时间】:2018-07-22 04:05:13
【问题描述】:

我在 Mac 中使用 PyQt5 创建 Qt 菜单栏时遇到问题。

我遇到的问题是菜单栏会显示,但直到我取消应用程序焦点(通过单击另一个应用程序),然后再次重新调整 Qt 应用程序时才会做出反应。

这是我的环境:

操作系统:Sierra 10.12

Python:来自 conda 的 Python 3.6

PyQt5: conda 默认(v5.3.1)

这是我的代码(主要来自http://zetcode.com/gui/pyqt5/menustoolbars/):

import sys

from PyQt5.QtWidgets import QMainWindow, QAction, QDesktopWidget, QApplication, qApp, QMenuBar

class Example(QMainWindow):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):

        self.resize(800, 600)
        self.center()
        self.setWindowTitle('Menubar')

        exitAction = QAction(' &Exit', self)
        exitAction.setShortcut('Ctrl-Q')
        exitAction.setToolTip('Exit application')
        exitAction.triggered.connect(qApp.quit)

        menubar = self.menuBar()
        fileMenu = menubar.addMenu('&File')
        fileMenu.addAction(exitAction)

        self.show()

    def center(self):

        center_point = QDesktopWidget().availableGeometry().center()
        frame = self.frameGeometry()
        frame.moveCenter(center_point)
        self.move(frame.topLeft())


if __name__ == '__main__':

    app = QApplication(sys.argv)
    window = Example()
    sys.exit(app.exec_())

下图显示了菜单栏,但它不会响应我的点击,直到我选择其他应用程序并再次返回我的 Qt 应用程序。

我搜索了很多网站,但没有找到解决方案。最接近的是这个 (https://github.com/robotology/yarp/issues/457),但它似乎没有帮助。

【问题讨论】:

标签: python-3.x macos pyqt5


【解决方案1】:

使用 pythonw 而不是 python3 运行您的代码。例如,如果您的文件名为 test-gui.py,请在命令行终端中输入:

pythonw test-gui.py

这为我解决了错误。它将代码视为可执行文件,因此操作系统不会对正在运行的内容感到困惑。

【讨论】:

  • 对于 MacOS 10.15.7 和 PyQt5 5.15.4,这对我不起作用。如果我执行上面的命令,那么我会从 PyQt5.QtWidgets import * ModuleNotFoundError: No module named 'PyQt5'重新聚焦。
猜你喜欢
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多