Resize Widgets with Pyqt

I'm a beginner of Python and PyQT. I'm trying to use QGridLayout to make the GUI, however I've got some problems when I place an image. This is how it looks without the image:

pic without image

Pretty good for me. However, when I try to add an image in the upper-right corner I get:

pic with image

Clearly isn't what I want (I'd like that part of the widget the same size as the first image i.e approximately the size of the original title). The code is a bit long so I post just the part of the grid:

    wid = QWidget(self)
    self.setCentralWidget(wid)
    grid = QGridLayout()
    title = QLabel(self)
    newfont = QFont("Times", 20, QFont.Bold)
    title.setText('Interfaz Gráfica PIC18F4550')
    title.setFont(newfont)
    title.setAlignment(Qt.AlignCenter)

    pic = QLabel(self)
    pic.setPixmap(QtGui.QPixmap('escudo.gif'))

    m = PlotCanvas(self, width=5, height=4)
    connect_btn = QPushButton('Conectar', self)
    connect_btn.setIcon(QIcon('lautaro.jpeg'))
    connect_btn.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
    exit_btn = QPushButton('Salir', self)
    exit_btn.setIcon(QIcon('lautaro.jpeg'))
    exit_btn.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
    disconnect_btn = QPushButton('Desconectar', self)
    disconnect_btn.setIcon(QIcon('lautaro.jpeg'))
    disconnect_btn.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
    frequency_btn = QPushButton('Frecuencia', self)
    frequency_btn.setIcon(QIcon('lautaro.jpeg'))
    frequency_btn.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
    duty_cycle_btn = QPushButton('Duty Cycle', self)
    duty_cycle_btn.setIcon(QIcon('lautaro.jpeg'))
    duty_cycle_btn.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
    grid.addWidget(connect_btn, 1, 0, 2, 1)
    grid.addWidget(disconnect_btn, 3, 0, 2 ,1)
    grid.addWidget(exit_btn, 5, 0, 2, 1)
    grid.addWidget(m, 1, 1, 6, 1)
    grid.addWidget(frequency_btn, 1, 2, 3, 1)
    grid.addWidget(duty_cycle_btn, 4, 2, 3, 1)
    grid.addWidget(title, 0, 1)
    grid.addWidget(pic, 0, 2)
    wid.setLayout(grid)

So, the question: how can I set the widget size? Clearly in this case the widgets related to title and the label are way larger than the buttons and the graph.

2

1 Answer

If you want the image to always have the same size you can set a fixed width and height as follows:

pic = QLabel(self)
pic.setPixmap(QtGui.QPixmap('escudo.gif'))
pic.setFixedWidth(250)
pic.setFixedHeight(250)

If you want the image to have a maximum size but it should resize and get smaller if the window gets smaller you can use the following:

pic.setMaximumWidth(250)
pic.setMaximumHeight(250)
1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Chloe Bennett

Chloe Bennett

Culture, Media & Entertainment Columnist

Chloe Bennett explores the intersection of pop culture, streaming entertainment, digital trends, and contemporary lifestyle. Her weekly commentary reaches thousands of culture enthusiasts.

Share this article
Twitter Facebook Pinterest