Python 如何在PyQt4中保持按钮相对于标签大小变化的恒定性

Python 如何在PyQt4中保持按钮相对于标签大小变化的恒定性,python,qt,pyqt,pyqt4,pyqt5,Python,Qt,Pyqt,Pyqt4,Pyqt5,我在PyQt4程序中有一个图像作为我的标签。该程序还包含一些按钮。现在,当我最大化我的窗口时,虽然标签被扩展,但是按钮保留了它们的位置。我希望按钮应保持其相对于标签的相对位置,即使最大化 我的代码如下: class Ui_MainWindow(object): def setupUi(self, MainWindow): self.centralwidget = QtGui.QWidget(MainWindow) MainWindow.setCentralWi

我在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++的问题可能是有用的:< /P>哦!是的,我明白了。我会努力做到这一点。我在这个领域还是个新手。你还能帮我解决我的疑问吗?帮助我们改进问题,我们会帮助你,这样你就能赢得声誉,我们也会帮助你。:)您想让按钮改变位置和尺寸,还是只改变位置?只改变位置,先生。@eyllanesc先生,您能检查一下这个问题吗。