我正在继承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)
答案 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)
截图: