QAbstractButton图像在列的整个宽度上延伸

时间:2017-09-11 20:27:31

标签: python pyqt pyqt5

我正在继承QAbstractButton类,以创建一个可访问用户文件的可点击图标。我在此教程后执行了此操作:https://coolchevy.org.ua/2016/06/20/basic-example-how-to-code-a-image-button-in-pyqt/

我遇到的唯一问题是QAbsractButton大小。我将它作为Widget添加到QGridLayout。在网格上,它位于宽度更大的按钮上方。图像采用列的大小和拉伸,如下所示

有没有办法在将QAbstractButton添加到屏幕之前调整它的大小?我试过.setMaximumWidth,但它没有方法。

更新w / code

def init_ui(self):
    self.settings_button=QPushButton("Email settings")
    self.templates_button=TemplateButton(QPixmap('templates.png'))
    self.layout.addWidget(self.templates_button,0,4)
    self.layout.addWidget(self.settings_button,1,4)`

class TemplateButton(QAbstractButton):
    def __init__(self,pixmap):
        super(TemplateButton, self).__init__()
        self.pixmap = pixmap

    def paintEvent(self, event):
        pix = self.pixmap
        if self.isDown():
            print("Click")
        painter = QPainter(self)
        painter.drawPixmap(event.rect(), pix)

    def enterEvent(self, event):
        self.update()
    def leaveEvent(self, event):
        self.update()
    def sizeHint(self):
        return QSize(50,50)

1 个答案:

答案 0 :(得分:0)

在这种情况下,我们必须使用方法setSizePolicy()建立窗口小部件的大小策略,可以建立的policies如下:

  

QSizePolicy :: Fixed :QWidget :: sizeHint()是唯一可接受的选择,因此窗口小部件永远不会增长或缩小(例如按钮的垂直方向)。

     

QSizePolicy :: Minimum :sizeHint()是最小的,足够的。可以扩展小部件,但是它更大(例如按钮的水平方向)没有优势。它不能小于sizeHint()提供的大小。

     

QSizePolicy :: Maximum :sizeHint()是最大值。如果其他小部件需要空间(例如分隔线),则小部件可以收缩任何数量而没有损害。它不能大于sizeHint()提供的大小。

     

QSizePolicy :: Preferred :sizeHint()是最好的,但是窗口小部件可以缩小并且仍然有用。可以扩展窗口小部件,但它大于sizeHint()(默认的QWidget策略)没有任何优势。

     

QSizePolicy :: Expanding :sizeHint()是一个合理的大小,但小部件可以缩小并仍然有用。小部件可以利用额外的空间,因此它应该获得尽可能多的空间(例如水平滑块的水平方向)。

     

QSizePolicy :: MinimumExpanding :sizeHint()是最小的,足够的。小部件可以利用额外的空间,因此它应该获得尽可能多的空间(例如水平滑块的水平方向)。

     

QSizePolicy :: Ignored 忽略sizeHint()。小部件将获得尽可能多的空间。

默认情况下,窗口小部件的策略为QSizePolicy::Preferred,但在您的情况下,您应使用QSizePolicy::Fixed。此外,您必须将对齐设置为居中,以便从上面得到以下内容:

self.settings_button=QPushButton("Email settings")
self.templates_button=TemplateButton(QPixmap('qt_extended_48x48.png'))
self.templates_button.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
self.layout.addWidget(self.templates_button,0,4, Qt.AlignCenter)
self.layout.addWidget(self.settings_button,1,4)

截图:

enter image description here

enter image description here