使用QPixmap的带有图像的Qlabel

时间:2019-11-25 10:29:47

标签: python pyqt5

我想在Qwidget中包含一个QToolbar,但是我发现只能在QMainWindow中创建一个QToolbar。因此,我想创建一个带有箭头图标的Qlabel。我下载了image with transparent background(我想)。但是,在代码中,图像并不像我预期的那样真正透明,看起来很难看。有什么方法可以只显示没有背景的箭头。下面是示例代码

import sys
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *


class App(QMainWindow):

    def __init__(self):
        super().__init__()
        self.title = 'test'
        self.left = 0
        self.top = 0
        self.width = 300
        self.height = 500
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        self.table_widget = MyTableWidget(self)
        self.setCentralWidget(self.table_widget)

        self.show()

class MyTableWidget(QWidget):

    def __init__(self, parent):
        super(QWidget, self).__init__(parent)
        self.layout = QVBoxLayout(self)

        # Create first tab
        label3 = QLabel()
        pixmap = QPixmap("index2.png")
        smaller_pixmap = pixmap.scaled(32, 32, Qt.KeepAspectRatio, Qt.FastTransformation)
        label3.setPixmap(smaller_pixmap)        
        label3.mouseReleaseEvent = self.on_click

        self.layout.addWidget(label3)
        self.setLayout(self.layout)

    @pyqtSlot()
    def on_click(self, event):
        print('yes')



if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:1)

您将得到一个“丑陋”的图像,因为该图像具有部分透明的线条。我提高了alpha阈值以更好地显示它们:

Image with alpha changed

这些行是图像的一部分,而Qt不能“猜测”图像的哪些部分对您“重要”或不重要。
从根本上讲,没有简单的方法可以通过代码将其删除,即使您成功了,结果还是很丑陋(在图像的边框周围需要部分透明才能使它们光滑),这是不值得的。

只需查找其他图像,或将其剪裁到箭头边框即可对其进行编辑。