你可以在发布后显示启动画面吗?

时间:2014-05-21 04:51:39

标签: python qt qt4 pyqt

我正在尝试将QSplashScreen用作“简单”通知窗口。我在对话框中构建实际通知,然后尝试使用QPixmap.grabWidget()并将pixmap传递给SplashScreen,但它没有显示。所以我想知道问题是否是由于我试图在启动后使用它。

我正在做的简化版本。

class NotifyHandler:

    def showNotify(self, event):
        widget = NotifyWidget.createInstance(event) # Build the QDialog
        #Do I need to do widget.show()?
        pixmap = QtGui.QPixmap.grabWidget(widget) # Convert to pixmap

        splash = QtGui.QSplashScreen(pixmap, QtCore.Qt.WindowStayOnTopHint)
        (x,y) = getDisplayLocation(splash) # Get coords to put it in bottom-right corner
        splash.setGeometry(splash.width(), splash.height(), x, y)

        splash.show()
        QtCore.QTimer.singleShot(3000, splash.close)

我试试这个,但没有出现。如果我尝试将其作为Dialog:

widget.show()
widget.raise_()
widget.activateWindow()

工作正常。所以我想要在发布后我不能这样做,或者当我尝试将它添加到小部件的像素图时会发生一些事情。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

似乎我的对话框问题和启动画面出现了同样的问题。

我忘了如果你没有将对话框(或者在这种情况下为Splash屏幕)分配给方法之外的范围,那么GC将在方法返回后吃掉对象。

所以只需添加如下内容:

self.splash = splash
self.splash.show()
QtCore.QTimer.singleShot(3000, self.splash.close)

启动画面不会被垃圾收集,我得到了闪屏。