Как сохранить постоянные кнопки относительно изменения размера метки в PyQt4

1

У меня есть изображение как мой ярлык в программе PyQt4. Эта программа также содержит некоторые кнопки. Теперь, когда я максимизирую свое окно, хотя ярлык расширяется, но кнопка сохраняет свое место. Я хочу, чтобы нажимные кнопки сохраняли свое относительное положение относительно метки, даже когда она была максимальной.

Мой код выглядит следующим образом:

class Ui_MainWindow(object):
   def setupUi(self, MainWindow):

       self.centralwidget = QtGui.QWidget(MainWindow)
       MainWindow.setCentralWidget(self.centralwidget)
       lay = QtGui.QVBoxLayout(self.centralwidget)
       self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
       self.label = QtGui.QLabel(self.centralwidget)
       self.label.setText(_fromUtf8(""))
       self.label.setPixmap(QtGui.QPixmap(_fromUtf8("Capture.PNG")))
       self.label.setObjectName(_fromUtf8("label"))
       self.label.setScaledContents(True)
       lay.addWidget(self.label)
       self.Langdon = QtGui.QPushButton(self.centralwidget)
       self.Langdon.setGeometry(QtCore.QRect(290, 90, 75, 23))
       self.Langdon.setObjectName(_fromUtf8("Langdon"))     
       self.ChainLakes = QtGui.QPushButton(self.centralwidget)
       self.ChainLakes.setGeometry(QtCore.QRect(50, 290, 85, 23))
       self.ChainLakes.setObjectName(_fromUtf8("ChainLakes"))

   if __name__ == "__main__":
      import sys
      app = QtGui.QApplication(sys.argv)
      MainWindow = QtGui.QMainWindow()
      ui = Ui_MainWindow()
      ui.setupUi(MainWindow)
      MainWindow.show()
      sys.exit(app.exec_())

Как мне изменить код?

Теги:
pyqt4
qt
pyqt5
pyqt

1 ответ

2
Лучший ответ

Вы используете абсолютное позиционирование для кнопок, но относительное для метки (потому что оно находится в макете). Поскольку кнопки расположены абсолютно, вы несете ответственность за перемещение их вокруг себя, когда изменяется размер контейнера (ваше главное окно или центральный виджет). OTOH, если вы разместите их с помощью макета, макет затем перемещает их по мере необходимости (как с меткой).

Я настоятельно рекомендую вам найти решение на основе макета, которое будет отвечать вашим потребностям (они очень гибкие, но иногда могут немного поиграть). Если вам это не нужно, вам нужно подклассифицировать контейнер (ваш QWidget centralWidget) и повторно выполнить обработчик QWidget::resizeEvent(). Внутри этого обработчика вы перемещаете абсолютно позиционированные элементы (кнопки) в новое положение, основанное на текущем размере контейнера и текущем размере/позиции метки.

Мне не достаточно удобно с PyQt, чтобы дать конкретный пример (извините), но я дал аналогичный ответ на вопрос C++, который может быть полезен: выравнивание QPushButton поверх другого виджета

Ещё вопросы

Сообщество Overcoder
Наверх
Меню