2016-02-19 38 views
1

我需要對齊兩個QLineEdit而不添加第一個QCheckBox(即a)。 QCheckBox.setVisible(False)不會佔用任何空間。我正在考慮使用QHboxLayout.addSpacing(int)。但是我怎麼能得到一個QCheckbox的大小呢?如何在Qt中添加大小爲組合框的間距

enter image description here

from PyQt5.QtCore import * 
from PyQt5.QtWidgets import (QApplication, QMainWindow, QLabel, QCheckBox, 
      QVBoxLayout, QWidget, QLineEdit, QHBoxLayout, QGroupBox) 
class MainWindow(QMainWindow): 

    def __init__(self): 

     super().__init__() 
     self.initUI() 

    def initUI(self): 
     hboxa = QHBoxLayout() 
     a = QCheckBox() 
     aa = QLineEdit() 
     hboxa.addWidget(a) 
     hboxa.addWidget(aa) 
     gboxa = QGroupBox() 
     gboxa.setLayout(hboxa) 

     hboxb = QHBoxLayout() 
     b = QCheckBox() 
     bb = QLineEdit() 
     hboxb.addWidget(b) 
     hboxb.addWidget(bb) 
     gboxb = QGroupBox() 
     gboxb.setLayout(hboxb) 

     vbox = QVBoxLayout() 
     vbox.addLayout(gboxa) 
     vbox.addLayout(gboxb) 
     w = QWidget() 
     w.setLayout(vbox) 

     self.setCentralWidget(w) 

     self.setWindowTitle('Window Title') 
     self.show() 

if __name__ == '__main__': 

    app = QApplication(sys.argv) 
    form = MainWindow() 
    sys.exit(app.exec_()) 

回答

2

變化sizePolicy,它控制如何小部件由佈局引擎處理時,它的尺寸重新調整

引用的文檔

的QSizePolicy類描述的水平和垂直的佈局屬性調整政策。

小部件的尺寸政策是要調整 以各種方式的意願的表達,並影響如何小部件是由 佈局引擎處理。每個小部件都會返回一個QSizePolicy,它描述了 水平和垂直調整大小策略,它在放置 時傾向於選擇。您可以通過更改其 QWidget.sizePolicy屬性來更改特定窗口小部件。

import sys 
from PyQt5.QtCore import * 
from PyQt5.QtWidgets import (QApplication, QMainWindow, QLabel, QCheckBox, 
      QVBoxLayout, QWidget, QLineEdit, QHBoxLayout) 
class MainWindow(QMainWindow): 

    def __init__(self): 

     super().__init__() 
     self.initUI() 

    def initUI(self): 
     hboxa = QHBoxLayout() 
     a = QCheckBox() 
     # size policy 
     not_resize = a.sizePolicy(); 
     not_resize.setRetainSizeWhenHidden(True); 
     a.setSizePolicy(not_resize); 
     a.setVisible(False) 

     aa = QLineEdit() 
     hboxa.addWidget(a) 
     hboxa.addWidget(aa) 
     hboxb = QHBoxLayout() 
     b = QCheckBox() 
     bb = QLineEdit() 
     hboxb.addWidget(b) 
     hboxb.addWidget(bb) 
     vbox = QVBoxLayout() 
     vbox.addLayout(hboxa) 
     vbox.addLayout(hboxb) 
     w = QWidget() 
     w.setLayout(vbox) 

     self.setCentralWidget(w) 

     self.setWindowTitle('Window Title') 
     self.show() 

if __name__ == '__main__': 

    app = QApplication(sys.argv) 
    form = MainWindow() 
    sys.exit(app.exec_()) 

更多的信息和文檔http://pyqt.sourceforge.net/Docs/PyQt4/qsizepolicy.html

+0

我修改了我的問題以更多地限制條件。只是告訴你。您的解決方案仍然可行 – minion

1

使用QGridLayout代替。您可以刪除或隱藏其中一個複選框,它應該仍然保持對齊。

a = QCheckBox() 
aa = QLineEdit() 
b = QCheckBox() 
bb = QLineEdit() 

lay = QGridLayout() 
lay.addWidget(a, 0, 0) 
lay.addWidget(aa, 0, 1) 
lay.addWidget(b, 1, 0) 
lay.addWidget(bb, 1, 1) 
lay.setColumnStretch(1, 1) 
w = QWidget() 
w.setLayout(lay) 
+0

的QCheckBoxs和QLineEdits實際上是內QGroupBoxs。對不起,我太過於簡化代碼。我已經修改了我的問題。 – minion