如何使用pyqt4调整布局之间的空间

时间:2019-01-03 09:43:31

标签: python-2.7 pyqt4

这是我的代码,我想减少布局之间的空间。请告诉我如何减少布局之间的空间。我尝试了多种方式使用addStrech方法并设置内容保证金。但是我没有得到正确的输出。我不知道我在哪里弄错了。请指导我。先感谢您。 下面是我的代码:

class Example1(QtGui.QWidget):

    def __init__(self,typ):
        super(Example1, self).__init__()
        self.initUI()

    def initUI(self):

        self.grid2 = QtGui.QGridLayout()
        self.vbox1 = QtGui.QVBoxLayout()

        self.hbox3 = QtGui.QHBoxLayout()

        self.alignvbox = QtGui.QVBoxLayout()

        self.label = QtGui.QLabel("Payment Details")
        self.label.setStyleSheet("font: bold 30pt Comic Sans MS")
        self.hbox3.addWidget(self.label,QtCore.Qt.AlignTop)
        self.hbox3.addStretch()
        self.label2 = QtGui.QLabel("Amount : ")

        self.label2.setStyleSheet("font: bold 15pt Comic Sans MS")
        self.label3 = QtGui.QLabel("Quantity : ")
        self.label3.setStyleSheet("font: bold 15pt Comic Sans MS")
        self.amountvbox = QtGui.QVBoxLayout()
        self.amountvbox.setContentsMargins(0, 0, 0, 0)
        self.amountvbox.addWidget(self.label2)
        self.quantityvbox = QtGui.QVBoxLayout()
        self.quantityvbox.setContentsMargins(0, 0, 0, 0)
        self.quantityvbox.addWidget(self.label3)
        self.vbox1.addLayout(self.amountvbox)
        self.vbox1.addLayout(self.quantityvbox)

        self.hbox3.addLayout(self.vbox1,QtCore.Qt.AlignTop)

        self.alignvbox.addLayout(self.hbox3,QtCore.Qt.AlignTop)
        self.hbox4 = QtGui.QHBoxLayout()
        self.wbtn1 = QtGui.QPushButton("CASH")
        self.wbtn1.setStyleSheet(ROUNDED_STYLE_SHEET2)
        self.hbox4.addWidget(self.wbtn1)

        self.wbtn2 = QtGui.QPushButton("CARD")
        self.wbtn2.setStyleSheet(ROUNDED_STYLE_SHEET3)
        self.hbox4.addWidget(self.wbtn2)

        self.wbtn3 = QtGui.QPushButton("WALLET")
        self.wbtn3.setStyleSheet(ROUNDED_STYLE_SHEET4)
        self.hbox4.addWidget(self.wbtn3)
        self.alignvbox.addLayout(self.hbox4,QtCore.Qt.AlignTop)
        self.alignvbox.addStretch()

        self.vbox2 = QtGui.QVBoxLayout()

        self.label4 = QtGui.QLabel("Received Amount")
        self.vbox2.addWidget(self.label4)
        self.label4.setStyleSheet("font: bold 30pt Comic Sans MS")
        self.lb = QtGui.QLCDNumber()
        self.lb.setDigitCount(8)
        self.vbox2.addWidget(self.lb)
        self.vbox2.setAlignment(QtCore.Qt.AlignTop)
        self.hboxlayout = QtGui.QHBoxLayout()

        self.hboxlayout.addLayout(self.vbox2)
        self.hboxlayout.addStretch()
        self.layout = QtGui.QGridLayout()

        names = ['7', '8', '9',
                 '4', '5', '6',
                '1', '2', '3',
                 '<--', '0', '.']

        positions = [(i,j) for i in range(4) for j in range(3)]

        for position, name in zip(positions, names):
            button = QtGui.QPushButton(name)
            self.layout.addWidget(button, *position)
        self.hboxlayout.addLayout(self.layout)
        self.alignvbox.addLayout(self.hboxlayout)
        self.setLayout(self.alignvbox)
def main():
  app = QtGui.QApplication(sys.argv)
  ex = Example1()
  ex.show()
  ex.setGeometry(300,300,500,500)
  sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:1)

一种可行的解决方案是在设置布局后将sizeHint设置为固定大小。

import sys
from PyQt4 import QtCore, QtGui

QSS = '''
QLabel#big{
    font: bold 30pt Comic Sans MS
}
QLabel#small{
    font: bold 15pt Comic Sans MS
}
'''

class Example1(QtGui.QWidget):
    def __init__(self, parent=None):
        super(Example1, self).__init__(parent)
        self.initUI()

    def initUI(self):
        grid = QtGui.QGridLayout(self)
        label_payment = QtGui.QLabel("Payment Details", objectName="big")
        label_received = QtGui.QLabel("Received Amount", objectName="big")

        label_amount = QtGui.QLabel("Amount: 192", objectName="small")
        label_quantity = QtGui.QLabel("Quantity: 1", objectName="small")

        cash_button = QtGui.QPushButton("Cash")
        card_button = QtGui.QPushButton("Card")
        wallet_button = QtGui.QPushButton("Wallet")

        lcd = QtGui.QLCDNumber()
        sp = lcd.sizePolicy()
        sp.setHorizontalPolicy(QtGui.QSizePolicy.Fixed)
        lcd.setSizePolicy(sp)

        grid_buttons = QtGui.QGridLayout()

        names = ['7', '8', '9',
                 '4', '5', '6',
                '1', '2', '3',
                 '<--', '0', '.']
        positions = [(i,j) for i in range(4) for j in range(3)]
        for position, name in zip(positions, names):
            button = QtGui.QPushButton(name)
            grid_buttons.addWidget(button, *position)

        grid.addWidget(label_payment, 0, 0, 2, 3)
        grid.addWidget(label_amount, 0, 5)
        grid.addWidget(label_quantity, 1, 5)

        hbox = QtGui.QHBoxLayout(spacing=0)
        hbox.setContentsMargins(0, 0, 0, 0)
        hbox.addWidget(cash_button)
        hbox.addWidget(card_button)
        hbox.addWidget(wallet_button)
        grid.addLayout(hbox, 3, 0, 1, 6)

        vbox = QtGui.QVBoxLayout(spacing=0)
        vbox.setContentsMargins(0, 0, 0, 0)
        vbox.addWidget(label_received)
        vbox.addWidget(lcd)
        grid.addLayout(vbox, 4, 1)

        grid.addLayout(grid_buttons, 4, 3, 4, 3)
        self.setFixedSize(self.sizeHint())

def main():
    app = QtGui.QApplication(sys.argv)
    app.setStyleSheet(QSS)
    ex = Example1()
    ex.show()
    ex.setGeometry(300,300,500,500)
    sys.exit(app.exec_())

if __name__ == '__main__': main()

enter image description here