如何实现在失去焦点时隐藏的永远在线的小部件

时间:2014-06-17 15:57:52

标签: python qt pyqt pyqt4

我需要实现一个顶级窗口小部件(屏幕上的固定位置),只要用户点击桌面上的其他位置就会隐藏它,但它应该逐渐隐藏,因此窗口小部件应该在发生时仍然可见。为了简化,我想要一些类似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,它不起作用。

关于如何解决这个问题的任何想法?

0 个答案:

没有答案