在Designer的spacers部件中有2個部件,分別是Horizontal Spacer和Vertical Spacer,這兩個部件都有orientation屬性,表示Spacer部件的方向。
如圖:
第一個布局中的Spacer部件是Horizontal Spacer,方向是水平方向,第二個布局中的Spacer部件是Vertical Spacer部件,方向是垂直方向。
我們把這兩個布局中的Spacer部件的方向進行調換,將水平部件的方向改為垂直,垂直部件的方向改為水平,如圖:
可以看到方向調整之后,兩個Spacer部件的效果也調換了,我們再來看看UI界面文件生成的代碼:
第一種情況生成的代碼分別為:
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_5.addItem(spacerItem)
.......
spacerItem1 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.horizontalLayout_6.addItem(spacerItem1)
第二種情況生成的代碼為:
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.horizontalLayout_5.addItem(spacerItem)
.......
spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_6.addItem(spacerItem1)
可以看到並沒有方向orientation屬性的直接代碼,而是通過將寬度和高度兩個值對調,同時sizePolicy的寬帶和高度的sizePolicy也進行了對調。
由此可見,無論是Horizontal Spacer還是Vertical Spacer,以及其設置不同的方向,本質上都是一致的,都是一個QSpacerItem類型的對象,在哪個方向擴展就將另一個方向的值設置小一點,並將自己方向的擴展測了設置為sizeType屬性指定值,另一個方向的大小策略設置為Minimum。