【问题标题】:How to add widget to center of the gridlayout using with pyqt4如何使用 pyqt4 将小部件添加到网格布局的中心
【发布时间】:2019-07-23 06:02:49
【问题描述】:

在我的示例程序中,我想将小部件添加到网格布局的中心。我使用了对齐方法,但它不起作用。谁能帮助我如何调整网格布局中心的小部件。提前谢谢你。

下面是我的示例代码:

import sys
from PyQt4 import QtGui,QtCore
class Example(QtGui.QWidget):
    def __init__(self):
        super(Example, self).__init__()
        self.initUI()
    def initUI(self):
        self.grid = QtGui.QGridLayout(self)
        self.title_hbox = QtGui.QHBoxLayout()
        self.title_hbox.addStretch()
        self.close_pushbtn = QtGui.QPushButton("Close")
        self.title_hbox.addWidget(self.close_pushbtn)
        self.grid.addLayout(self.title_hbox,0,0)
        self.line = QtGui.QFrame(frameShape=QtGui.QFrame.HLine)
        self.grid.addWidget(self.line,1,0)
        self.order_hbox = QtGui.QHBoxLayout()
        vbox = QtGui.QVBoxLayout()
        label = QtGui.QLabel("address ")
        vbox.addWidget(label)
        hbox=QtGui.QHBoxLayout()
        le =QtGui.QLabel("scroll area")
        hbox.addWidget(le)
        self.order_hbox.addLayout(vbox)
        self.order_hbox.addLayout(hbox)
        self.grid.addLayout(self.order_hbox,2,0)
        self.addhbox = QtGui.QHBoxLayout()
        self.add_btn = QtGui.QPushButton("Add") #@ Add button i want to adjust the center of the gridlayout (its tacking whole length..)
        self.addhbox.addWidget(self.add_btn,QtCore.Qt.AlignCenter)
        self.grid.addLayout(self.addhbox,3,0)
        self.resize(800, 300)
        self.show()
def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

我的添加按钮占据了整个宽度,但我想调整小部件的中间

【问题讨论】:

  • 你可以展示一张你想要得到的图片。

标签: python python-2.7 pyqt pyqt4 qpushbutton


【解决方案1】:

您必须更改按钮的 QSizePolicy,使其不会水平扩展。

不要滥用自我,这是使用“自我”来保持参考,但在极少数情况下您可以访问它的布局。另一方面,为了维持秩序,我首先声明了小部件。

最后我删除了一些不必要的布局。

def initUI(self):
    self.close_pushbtn = QtGui.QPushButton(
        text="Close",
        sizePolicy=QtGui.QSizePolicy(QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Maximum)
    )
    self.line = QtGui.QFrame(frameShape=QtGui.QFrame.HLine)
    self.add_btn = QtGui.QPushButton(
        text="Add",
        sizePolicy=QtGui.QSizePolicy(QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Maximum)
    )
    label = QtGui.QLabel(text="address ")
    le = QtGui.QLabel(text="scroll area")

    title_hbox = QtGui.QHBoxLayout()
    title_hbox.addWidget(self.close_pushbtn, alignment=QtCore.Qt.AlignRight)

    order_hbox = QtGui.QHBoxLayout()
    order_hbox.addWidget(label)
    order_hbox.addWidget(le)

    addhbox = QtGui.QHBoxLayout()
    addhbox.addWidget(self.add_btn, alignment=QtCore.Qt.AlignCenter)

    grid = QtGui.QVBoxLayout(self)
    grid.addLayout(title_hbox)
    grid.addWidget(self.line)
    grid.addLayout(order_hbox)
    grid.addLayout(addhbox)

    self.resize(800, 300)
    self.show()

另一种选择是在每一侧使用拉伸:

def initUI(self):
    self.close_pushbtn = QtGui.QPushButton(text="Close")
    self.line = QtGui.QFrame(frameShape=QtGui.QFrame.HLine)
    self.add_btn = QtGui.QPushButton(text="Add")
    label = QtGui.QLabel(text="address ")
    le = QtGui.QLabel(text="scroll area")

    title_hbox = QtGui.QHBoxLayout()
    title_hbox.addStretch()
    title_hbox.addWidget(self.close_pushbtn)

    order_hbox = QtGui.QHBoxLayout()
    order_hbox.addWidget(label)
    order_hbox.addWidget(le)

    addhbox = QtGui.QHBoxLayout()
    addhbox.addStretch()
    addhbox.addWidget(self.add_btn)
    addhbox.addStretch()

    grid = QtGui.QVBoxLayout(self)
    grid.addLayout(title_hbox)
    grid.addWidget(self.line)
    grid.addLayout(order_hbox)
    grid.addLayout(addhbox)

    self.resize(800, 300)
    self.show()

【讨论】:

  • 在网格布局中我应用了相同的逻辑,但它不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-05
  • 2016-11-26
  • 1970-01-01
  • 2021-12-05
  • 2016-12-12
  • 1970-01-01
相关资源
最近更新 更多