PyQt 5.9.2、Python 3.6.6、Windows 10我想根據其容器小部件的當前寬度動態隱藏/顯示小部件。如果space小于整個寬度的 10% 按鈕“一”被隱藏,則按鈕“二”。當用戶使容器變大時,按鈕會再次顯示:“兩個”,然后是“一個”。這是我的實現的一個非?;镜陌姹荆蟛糠侄加行?,但有一個大問題。我開始調整大小,按鈕“一”隱藏,但隨后出現了一些限制,容器無法再縮小。我必須釋放鼠標按鈕并再次啟動該過程以隱藏按鈕“二”。import sysfrom PyQt5 import QtWidgetsform, space, widgets = None, None, Nonedef resize_event(event): if free_space_width() < 0: visible_w = [w for w in widgets if w.isVisible()] if len(visible_w) > 1: # do not hide the last one for w in visible_w: w.hide() if free_space_width(w.width()) >= 0: break # enough space else: invisible_w = [w for w in widgets if not w.isVisible()] for w in reversed(invisible_w): if free_space_width(-w.width()) < 0: break w.show()def free_space_width(shift=0): "Free space should be at least 10% of the bar width" return space.width() + shift - 0.1 * form.width()if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) form = QtWidgets.QWidget() layout = QtWidgets.QHBoxLayout(form) layout.setSpacing(0) # for simplicity form.resize(480, 64) form.resizeEvent = resize_event widgets = [QtWidgets.QPushButton("test button %d" % (i + 1), form) for i in range(3)] for i in widgets: layout.addWidget(i) space = QtWidgets.QWidget(form) # stretchable space s_policy = space.sizePolicy() s_policy.setHorizontalStretch(1) space.setSizePolicy(s_policy) layout.addWidget(space) form.show() sys.exit(app.exec_())
2 回答

largeQ
TA貢獻2039條經驗 獲得超8個贊
那么一些約束就出現了,容器的大小不能減小
layout.setSizeConstraint(QtWidgets.QLayout.SetNoConstraint)
我認為你應該像這樣在這段代碼下實現它。
layout = QtWidgets.QHBoxLayout(form)
layout.setSpacing(0) # for simplicity
layout.setSizeConstraint(QtWidgets.QLayout.SetNoConstraint)
添加回答
舉報
0/150
提交
取消