PyQt:Qt.Popup小部件有时会在没有关闭的情况下失去焦点,变得无法使用

时间:2011-07-12 22:55:54

标签: python qt ubuntu pyqt pyqt4

我正在用PyQt编写一个非常小的应用程序。到目前为止,我的所有测试都在Ubuntu / gnome上进行。

我想要一个单独的“弹出窗口”样式窗口,没有任务栏/面板条目,它会在失去焦点时关闭自己(和应用程序)。

Qt.Popup标志似乎符合要求,但我遇到了一个奇怪的问题。我注意到它可能(实际上非​​常容易)在应用程序启动时将焦点从应用程序中移开,留下没有焦点的弹出窗口 - 现在无法关闭它,因为它不会失去焦点。 / p>

这是一个简化的例子:

#!/usr/bin/python
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *

if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = QDialog()
    w.setWindowFlags(Qt.Popup)
    w.exec_()

如果在程序启动的同一时刻点击一下,QDialog将无焦点出现,并且在任何情况下都不会自行关闭。单击弹出窗口不会恢复焦点或允许其关闭。

我可以在弹出窗口中添加一个关闭按钮(我打算!),但这并不能解决破坏的近距离焦点行为。我有什么其他的东西我应该用Qt.Popup窗口来防止这种情况,还是有某些方法可以解决它?

1 个答案:

答案 0 :(得分:4)

使用QWidget :: raise()似乎对此有所帮助。 (还冒昧并修复了你的app事件循环)

#!/usr/bin/python
import sys
#import time
from PyQt4.QtCore import *
from PyQt4.QtGui import *

if __name__ == '__main__':
    #time.sleep(2)
    app = QApplication(sys.argv)
    w = QDialog()
    w.setWindowFlags(Qt.Popup)
    w.setAttribute(Qt.WA_QuitOnClose)
    w.show()
    w.raise_()
    sys.exit(app.exec_())