python - 如何在 PyQt4 中保持按钮相对于标签大小的变化不变

标签 python qt pyqt pyqt4 pyqt5

我有一个图像作为 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_())

我该如何修改我的代码?

最佳答案

您对按钮使用绝对定位,但对标签使用相对定位(因为它位于布局中)。由于按钮是绝对定位的,因此只要容器大小(主窗口或中央小部件)发生变化,您就有责任在自己周围移动它们。 OTOH,如果您使用布局定位它们,布局会根据需要移动它们(与标签一样)。

我强烈建议您找到一个适合您需求的基于布局的解决方案(它们非常灵活,但有时可能需要一些调整)。除此之外,您需要对容器(您的 centralWidget QWidget)进行子类化并重新实现 QWidget::resizeEvent() 处理程序。在该处理程序中,您可以根据容器的当前大小和标签的当前大小/位置将绝对定位的元素(按钮)移动到新位置。

我对 PyQt 的使用不够方便,无法给出具体的示例(抱歉),但我确实为 C++ 问题提供了类似的答案,该答案可能有用:QPushButton alignment on top another widget

关于python - 如何在 PyQt4 中保持按钮相对于标签大小的变化不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50864375/

相关文章:

linux - Python//读取给定输入后的行

python /灰鲭鲨 : Script Tag not showing up from Sub Template when Loaded into Main Template via Ajax Call

python - 导入错误 : cannot import name COMError in python

python - 如何修复 "peewee.IntegrityError: NOT NULL constraint failed: fiskalna.user_id"

python - QLineEdit 对象的 PyQt 集合

python - PyQt:如何将我的脚本转换为 GUI?

qt - 将 Qt 布局应用到随机放置的小部件 UI

c++ - 如何以编程方式获取 QTableWidgetItem 的边距宽度?

css - QTreeWidget 自定义选择和悬停背景颜色行为

qt - 为什么 QGroupBox 小部件不会随窗口的其余部分动态调整大小?