PyQ中透明QSplashScreen图像上的白色边框

2024-06-26 00:13:43 发布

您现在位置:Python中文网/ 问答频道 /正文

Google虽然我试过了,但我似乎不知道如何摆脱我在QSplashScreen服务的png周围的白色边界。在

我看过this article,但我不知道如何将其转换为PyQt,也不知道这是否是我想要的。在

我甚至尝试过将黑白两种颜色的面膜分开设置,结果效果很差,到处都是圆点。在

有没有人想出了神奇的半透明/半透明的SplashScreen,你也可以通过showMessage命令向它提供文本数据?提前谢谢。在

我应该说这也是Windows7。在

下面是一个测试PNG,我用它作为初始图像,以及由此产生的丑陋的白色边框:

Splash ImageResult in Windows 7

另一种通过QBitmap提供黑白alpha的方法可以得到这个更接近但更丑陋的例子,其中有大量奇怪的点。代码和图像如下。在

    splash_pix = QPixmap(":/images/images/PyQtSplash.png")
    splash = QSplashScreen(splash_pix, Qt.WindowStaysOnTopHint)
    splash.setMask(QBitmap(QPixmap(":/images/images/PyQtSplashAlpha.jpg")))

Splash AlphaQBitmap Result


Tags: 图像pnggooglearticlethispyqt边界images
1条回答
网友
1楼 · 发布于 2024-06-26 00:13:43

只要您使用的图像具有干净的透明区域,则只需将其掩码传递给^{}。在

此脚本在Linux上按预期工作:

from PyQt4 import QtGui, QtCore

def show_splash(path):
    image = QtGui.QPixmap(path)
    splash = QtGui.QSplashScreen(image)
    splash.setAttribute(QtCore.Qt.WA_DeleteOnClose)
    splash.setMask(image.mask())
    font = QtGui.QFont(splash.font())
    font.setPointSize(font.pointSize() + 5)
    splash.setFont(font)
    splash.show()
    QtGui.QApplication.processEvents()
    for count in range(1, 6):
        splash.showMessage(splash.tr('Processing %1...').arg(count),
                           QtCore.Qt.AlignBottom | QtCore.Qt.AlignLeft,
                           QtCore.Qt.white)
        QtGui.QApplication.processEvents()
        QtCore.QThread.msleep(1000)

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    show_splash(sys.argv[1])
    app.quit()

编辑

此自定义SplashScreen类应在Linux和Windows上产生合理的结果:

^{pr2}$

相关问题 更多 >