我需要实现一个顶级窗口小部件(屏幕上的固定位置),只要用户点击桌面上的其他位置就会隐藏它,但它应该逐渐隐藏,因此窗口小部件应该在发生时仍然可见。为了简化,我想要一些类似Windows 8右侧边栏的东西,当用户按下一个按钮时,就像它出现的超级键,当点击其他地方时,它会消失,但在此过程中仍然可见。
这就是,我想要一个永远在顶部的窗口,当它失去焦点时隐藏。我已经在pyqt4中实现了它,但它无法正常工作。
import sys
from PyQt4 import QtGui, QtCore
class Signals(QtCore.QObject):
close = QtCore.pyqtSignal()
class Menu(QtGui.QWidget):
def __init__(self, signals):
super(Menu, self).__init__()
self.signals = signals
def mousePressEvent(self, event):
# Just simplificating the gradual hiding effect for the moment
self.signals.close.emit()
def focusOutEvent(self, event):
print "FocusOut"
self.signals.close.emit()
def main():
app = QtGui.QApplication(sys.argv)
signals = Signals()
signals.close.connect(app.quit)
w = Menu(signals)
w.setWindowFlags( QtCore.Qt.SplashScreen )
w.resize(200, 200)
w.move(0, 0)
w.setWindowTitle('Test')
w.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
但是,这不起作用。当我点击其他地方时,小部件将不会进入focusOutEvent。我也尝试过安装eventFilter,但由于窗口是SplashScreen,它不起作用。
关于如何解决这个问题的任何想法?