2014-06-17 92 views
0

我的應用程序窗口包含兩個部分。頂部由QVerticalLayout中包含的幾個小部件組成,QVerticalLayout又包含在QVerticalSpacer中。這部分總是可見的。如何在PySide QT中動態更改面板的尺寸?

底部窗格包含在GroupBox中,並且在用戶請求時可能會變爲不可見。在屏幕底部添加一個複選框,吹出組合框。點擊它可以通過調用hide()和show()方法來切換組框的可見性。

現在,當底部窗格被隱藏時,我能做些什麼來縮小它的高度,儘可能地將其關閉到零?或者包含這兩部分的選項卡的尺寸?或整個QMainWindow?

試圖玩我的groupbox的SizePolicy。 VerticalPolicy在這裏是有趣的屬性。試圖將其設置爲Fixed,然後在調用groupbox.hide()之後調用groupbox.setGeometry()。似乎以這種方式,我無法將組框縮小到10個像素左右。無法將它縮小到內容的高度。

我應該消耗組框從它隱藏它,並重新填充它響應表明,當內容?我希望有更好的辦法。

+0

可能[我如何自動調整QDialog的大小取決於它的一個孩子的文本長度?](http://stackoverflow.com/qu estions/1675499 /如何-DO-I-自動調整最尺寸的-A-QDialog的-取決於 - 上的文本長度的酮O) – Trilarion

回答

1

既可以使用非默認尺寸約束上的佈局:

layout.setSizeConstraint(QtGui.QLayout.SetFixedSize) 

或隱藏後調用adjustSize:

widget.adjustSize() 

爲PySide一個小例子:

from PySide import QtGui 

app = QtGui.QApplication([]) 
window = QtGui.QWidget() 
window_layout = QtGui.QVBoxLayout(window) 
window_layout.setSizeConstraint(QtGui.QLayout.SetFixedSize) # either this line 
button = QtGui.QPushButton('Hide the box', window) 
window_layout.addWidget(button) 
box = QtGui.QGroupBox('A group') 
box_layout = QtGui.QVBoxLayout(box) 
box_layout.addWidget(QtGui.QLabel('Some text', box)) 
window_layout.addWidget(box) 

def adjust(): 
    box.hide() 
    window.adjustSize() # or that line do the trick 

button.clicked.connect(adjust) 

window.show() 
app.exec_()