【发布时间】:2016-10-31 17:16:39
【问题描述】:
我正在 PyQT5 中开发一个应用程序,其顶部有一个 QWidget 对象。此应用程序需要能够在“信息亭”模式下运行,因此我的目标是使该顶部 QWidget 模式化并防止任何其他正在运行的应用程序被聚焦。
主类的骨架如下。请注意,我正在调用 setWindowModality() 方法,该方法理论上将窗口的行为设置为所选的:
class MyApp(QWidget):
def __init__(self):
QWidget.__init__(self)
self.setWindowModality(3)
我的主要方法如下:
app = QApplication(sys.argv)
MyApp()
sys.exit(app.exec_())
按照setWindowModality()方法documentation:
Qt.NonModal 0 窗口不是模态的,不阻塞其他窗口的输入。
Qt.WindowModal 1 窗口对单个窗口是模态的 层次结构和块输入到其父窗口,所有祖父 windows 及其父窗口和祖父窗口的所有兄弟窗口。
Qt.ApplicationModal 2 窗口对应用程序是模态的,并且 阻止所有窗口的输入。
问题是窗口根本不是模态的,我可以切换到不同的应用程序(比如 Web 浏览器),这正是我想要阻止的。我也尝试将 1、2、3 作为值,它们产生相同的行为。
我担心这可能是一个设计限制,以避免应用程序阻塞其他应用程序,但我不确定,我无法确认。
我在这里遗漏了一些明显的东西吗?如果问题是设计限制,有没有办法仍然模拟模态窗口?
【问题讨论】: