Python 我想设置复选框边距?对齐

Python 我想设置复选框边距?对齐,python,checkbox,pyqt5,qdialog,Python,Checkbox,Pyqt5,Qdialog,我制作了一些Qdialog,当我执行代码时,复选框没有均匀对齐: 但我想这样: 代码如下: class SelectPay_Dialog2(Qdialog): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setGeometry(500, 200, 400, 200) self.setWindowTit

我制作了一些
Qdialog
,当我执行代码时,复选框没有均匀对齐:

但我想这样:

代码如下:

class SelectPay_Dialog2(Qdialog): 

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(500, 200, 400, 200)
        self.setWindowTitle("Window")


        label1 = QLabel("test  : ")
        label2 = QLabel("test  : ")
        label3 = QLabel("test : ")
        #
        label1.setFixedSize(80, 20)
        label2.setFixedSize(80, 20)
        label3.setFixedSize(80, 20)

        cb1 = QCheckBox('1week')
        cb2 = QCheckBox('2week')
        cb3 = QCheckBox('3week')
        cb4 = QCheckBox('4week')
        cb5 = QCheckBox('5week')
        cb6 = QCheckBox('6week')

        self.input_date_text1 = QLineEdit()
        self.input_date_text2 = QLineEdit()
        self.input_date_text1.setFixedSize(100, 25)
        self.input_date_text2.setFixedSize(100, 25)
        self.input_date_text1.setReadOnly(True)
        self.input_date_text2.setReadOnly(True)

        layout = QGridLayout()
        layout.addWidget(label1, 0, 0)
        layout.addWidget(label2, 2, 0)
        layout.addWidget(label3, 1, 0)

        layout.addWidget(self.input_date_text1, 2, 1)
        layout.addWidget(self.input_date_text2, 2, 2)
   
        layout.addWidget(cb1, 1, 1 )
        layout.addWidget(cb2, 1, 2 )
        layout.addWidget(cb3, 1, 3 )
        layout.addWidget(cb4, 1, 4)
        layout.addWidget(cb5, 1, 5)

        self.setLayout(layout)

在你写的
layout.addWidget(cb1,1,1)
你的括号间距不同于
layout.addWidget(cb4,1,4)
使它们都相等,它应该修复它,正如名字所示,QGridLayout将项目放置在一个有行和列的网格中。如果更仔细地查看图像,您将看到前两个复选框与行编辑对齐

如果您不想要这种行为,那么您有不同的选项,所有选项都使用QHBoxLayout:

  • 根本不使用网格布局,而是使用QVBoxLayout作为主布局,并为每个“行”添加QHBoxLayout;这有一个缺点,第一个“列”可能未对齐,这似乎是您的案例的要求
  • 使用QFormLayout,右边带有QHBoxLayout的
    addRow
  • 添加具有正确列跨度的QHBoxLayout 第三种情况可能适用于通常在右侧有固定数量的小部件的情况。
    以下是将两行编辑视为“默认”布局安排时,您的案例的外观:

        checkLayout = QHBoxLayout()
        layout.addLayout(checkLayout, 1, 1, 1, 3)
        checkLayout.addWidget(cb1)
        checkLayout.addWidget(cb2)
        checkLayout.addWidget(cb3)
        checkLayout.addWidget(cb4)
        checkLayout.addWidget(cb5)
    
    注意,我使用了3的列span。这将确保布局占用3列,并且由于只有两列实际占用(通过行编辑),因此剩余空间将仅用于复选框所需的剩余宽度


    类似的相关解决方案需要将行编辑添加到它们自己的QHBoxLayout中,但也需要在它们之后使用,以便在它们的右侧保持空白。

    对于复杂的布局,我建议使用Qt designer。您可以使用
    pyuic5
    工具将使用它创建的
    ui
    文件转换为python代码

    main.py

    从PyQt5导入QtWidgets、QtCore
    从用户界面选择付款对话框2导入用户界面选择付款对话框2
    类SelectPay_对话框2(qtwidts.QDialog):
    def uuu init uuu(self,parent=None):
    super()。\uuuu init\uuuu(父级)
    ui=ui\u选择支付\u对话框2()
    ui.setupUi(self)
    如果名称=“\uuuuu main\uuuuuuuu”:
    app=QtWidgets.QApplication([])
    widget=SelectPay\u Dialog2()
    widget.show()
    app.exec()
    
    Ui\u选择支付对话框2.py

    从PyQt5导入QtCore、QtGui、qtwidget
    类用户界面\选择付款\对话框2(对象):
    def设置界面(自助,选择支付对话框2):
    SelectPay_Dialog2.setObjectName(“SelectPay_Dialog2”)
    选择Pay_Dialog2。调整大小(432150)
    self.gridLayout=qtwidts.QGridLayout(选择Pay_Dialog2)
    self.gridLayout.setObjectName(“gridLayout”)
    self.label=qtwidts.QLabel(选择支付对话框2)
    sizePolicy=qtwidts.QSizePolicy(qtwidts.QSizePolicy.Preferred,qtwidts.QSizePolicy.expansing)
    sizePolicy.setHorizontalStretch(0)
    sizePolicy.setVerticalStretch(0)
    sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
    self.label.setSizePolicy(sizePolicy)
    self.label.setObjectName(“标签”)
    self.gridLayout.addWidget(self.label,0,0,1,1)
    self.label_2=qtwidts.QLabel(选择支付对话框2)
    sizePolicy=qtwidts.QSizePolicy(qtwidts.QSizePolicy.Preferred,qtwidts.QSizePolicy.expansing)
    sizePolicy.setHorizontalStretch(0)
    sizePolicy.setVerticalStretch(0)
    sizePolicy.setHeightForWidth(self.label_2.sizePolicy().hasHeightForWidth())
    self.label_2.setSizePolicy(sizePolicy)
    self.label_2.setObjectName(“label_2”)
    self.gridLayout.addWidget(self.label_2,1,0,1,1)
    self.horizontalLayout=qtwidts.QHBoxLayout()
    self.horizontalLayout.setObjectName(“horizontalLayout”)
    self.cb1=qtwidts.QCheckBox(选择支付对话框2)
    self.cb1.setObjectName(“cb1”)
    self.horizontalLayout.addWidget(self.cb1)
    self.cb2=qtwidts.QCheckBox(选择支付对话框2)
    self.cb2.setObjectName(“cb2”)
    self.horizontalLayout.addWidget(self.cb2)
    self.cb3=qtwidts.QCheckBox(选择支付对话框2)
    self.cb3.setObjectName(“cb3”)
    self.horizontalLayout.addWidget(self.cb3)
    self.cb4=qtwidts.QCheckBox(选择支付对话框2)
    self.cb4.setObjectName(“cb4”)
    self.horizontalLayout.addWidget(self.cb4)
    self.cb5=qtwidts.QCheckBox(选择Pay_Dialog2)
    self.cb5.setObjectName(“cb5”)
    self.horizontalLayout.addWidget(self.cb5)
    self.cb6=qtwidts.QCheckBox(选择支付对话框2)
    self.cb6.setObjectName(“cb6”)
    self.horizontalLayout.addWidget(self.cb6)
    self.gridLayout.addLayout(self.horizontalLayout,1,1,1)
    self.label_3=qtwidts.QLabel(选择支付对话框2)
    sizePolicy=qtwidts.QSizePolicy(qtwidts.QSizePolicy.Preferred,qtwidts.QSizePolicy.expansing)
    sizePolicy.setHorizontalStretch(0)
    sizePolicy.setVerticalStretch(0)
    sizePolicy.setHeightForWidth(self.label_3.sizePolicy().hasHeightForWidth())
    self.label_3.setSizePolicy(sizePolicy)
    self.label_3.setObjectName(“label_3”)
    self.gridLayout.addWidget(self.label_3,2,0,1,1)
    self.horizontalLayout_2=qtwidts.QHBoxLayout()
    self.horizontalLayout_2.setObjectName(“horizontalLayout_2”)
    self.input\u date\u text1=QtWidgets.QLineEdit(选择Pay\u Dialog2)
    self.input_date_text1.setObjectName(“input_date_text1”)
    self.horizontalLayout\u 2.addWidget(self.input\u date\u text1)
    self.input\u date\u text2=QtWidgets.QLineEdit(选择Pay\u Dialog2)
    self.input_date_text2.setObjectName(“input_date_text2”)
    self.horizontalLayout\u 2.addWidget(self.input\u date\u text2)
    SpaceItem=qtwidts.QSpacerItem(40,20,qtwidts.QSizePolicy.expansing,qtwidts.QSizePolicy.Minimum)
    自身水平布置图\u 2.附加项(间隔项)
    自网格