亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在調整大小事件中修改布局

在調整大小事件中修改布局

肥皂起泡泡 2022-01-05 13:03:49
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 回答

?
慕村9548890

TA貢獻1884條經驗 獲得超4個贊

可以將按鈕放在容器小部件中并重新實現minimumSizeHint方法,因此 Qt 不會嘗試自行計算。

def minimumSizeHint(self):
    return QtCore.QSize(150, 30)

更新:我已經在自定義布局setGeometry函數中實現了顯示/隱藏邏輯。


查看完整回答
反對 回復 2022-01-05
?
largeQ

TA貢獻2039條經驗 獲得超8個贊

那么一些約束就出現了,容器的大小不能減小


layout.setSizeConstraint(QtWidgets.QLayout.SetNoConstraint)


我認為你應該像這樣在這段代碼下實現它。


layout = QtWidgets.QHBoxLayout(form)

layout.setSpacing(0)  # for simplicity

layout.setSizeConstraint(QtWidgets.QLayout.SetNoConstraint)


查看完整回答
反對 回復 2022-01-05
  • 2 回答
  • 0 關注
  • 148 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號