PyQt: Qt.Popup小部件有时失去焦点且无法关闭
我正在用PyQt写一个非常小的应用程序。到目前为止,我的测试都是在Ubuntu/gnome上进行的。
我想要一个单独的“弹出”窗口,这个窗口在任务栏或面板上不会有任何显示,一旦失去焦点就会自动关闭(连同应用程序一起关闭)。
Qt.Popup这个标志似乎符合我的需求,但我遇到了一个奇怪的问题。我发现,在应用程序启动时,很容易就能把焦点移开,这样弹出窗口就会失去焦点——而且这时它就无法关闭了,因为它无法再失去焦点。
下面是一个简化的例子:
#!/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 个回答
4
使用QWidget::raise()似乎可以解决这个问题。
(我还顺便修复了你的应用程序事件循环)
#!/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_())