2017-09-11 3 views
0

QAbstractButton 클래스를 상속하여 사용자 파일에 액세스 할 수있는 클릭 가능한 아이콘을 만듭니다. 나는이 자습서를 여기에 따라 여기에했다 : https://coolchevy.org.ua/2016/06/20/basic-example-how-to-code-a-image-button-in-pyqt/QAbstractButton 열 너비의 이미지 너비

내가 겪고있는 유일한 문제는 QAbsractButton 크기입니다. QGridLayout에 위젯으로 추가하고 있습니다. 그리드에서, 그것은 더 큰 너비를 가진 버튼 바로 위에 있습니다.

이 화면에 추가되기 전에 QAbstractButton의 크기를 조정하는 방법이 여기에 도시 된 바와 같이 화상은 열과 뻗어의 크기를 얻어? 시도했다 .setMaximumWidth,하지만 메서드가 없습니다. 감사! 우리는 방법 setSizePolicy()를 사용하여 위젯의 크기 정책을 설정해야합니다 업데이트이 경우 코드

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

enter image description here이 – eyllanesc

+0

@eyllanesc를 코드를 보여주세요 또한 당신은 당신 위의 다음 수에서, 그래서 중심으로하는 정렬을 설정해야합니다 관련 코드로 업데이트했습니다. –

답변

0

승/

설립 할 수있는 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

+0

고맙습니다. 그것은 작동하고 이제 QAbstractButtons ++의 크기를 결정하는 방법을 알고 있습니다. –