Python 创建自定义PyQt5图像按钮

Python 创建自定义PyQt5图像按钮,python,pyqt,pyqt5,qwidget,qabstractbutton,Python,Pyqt,Pyqt5,Qwidget,Qabstractbutton,我试图创建自定义PyQt5按钮,但在QMainWindow对象中显示它时遇到问题。以下是我正在尝试的代码: import sys from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtWidgets import QMainWindow class PicButton(QAbstractButton): def __init__(self, pixm

我试图创建自定义PyQt5按钮,但在
QMainWindow
对象中显示它时遇到问题。以下是我正在尝试的代码:

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

class PicButton(QAbstractButton):
    def __init__(self, pixmap, parent=None):
        super(PicButton, self).__init__(parent)
        self.pixmap = pixmap

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.drawPixmap(event.rect(), self.pixmap)

    def sizeHint(self):
        return self.pixmap.size()

class App(QMainWindow):
    def __init__(self):
        super().__init__()
        self.left = 0
        self.top = 0
        self.width = 800
        self.height = 800
        self.initUI()

    def initUI(self):
        self.setGeometry(self.left, self.top, self.width, self.height)
        self.setAutoFillBackground(True)
        p = self.palette()
        p.setColor(self.backgroundRole(), Qt.white)
        self.setPalette(p)
        btn = PicButton('/home/user/Desktop/Untitled.png')
        btn.move(0, 0)
        btn.resize(80,80)
        self.show()


app = QApplication(sys.argv)
window = App()

如果您只需使用
window=Widget()
并将button对象放入其中,则该按钮将起作用,如此答案所示:

根据您的代码,您必须将QPixmap传递给PicButton,此外,如果您要移动它,它还应告诉您在哪里,如果您传递了父对象,它将放置在相对于父亲的位置,但不会被绘制

要解决此问题,您必须更改:

btn = PicButton('/home/user/Desktop/Untitled.png')
致:


根据您的代码,您必须将QPixmap传递给PicButton,此外,如果您要移动它,它还应该告诉您,如果您传递父对象,它将放置在相对于父对象的位置,但不会被绘制

要解决此问题,您必须更改:

btn = PicButton('/home/user/Desktop/Untitled.png')
致: