簡體   English   中英

如何在 PyQt5 中使用具有垂直布局的 QScrollArea 使小部件堆疊在一起?

[英]How to make widgets stack on top of each other using QScrollArea with Vertical layout in PyQt5?

我是 PyQt5 的超級新手,並試圖設計一個通知面板,其中最新的通知應該放在頂部而不是底部。 對於通知,我使用的是 QLabel 小部件和通知面板,我使用的是 QScrollArea,其垂直布局和垂直策略設置為 Fixed,否則它將 label 放在中心而不是頂部。

所以,問題是,當我想將新標簽放在頂部時,它會將我的新標簽放在底部。 我試圖弄亂幾何 function,通過創建一個列表到 append 每個新通知 label,然后相應地從最高索引遍歷列表到最低,更改每個標簽' 這是代碼:

        if len(self.alert_labels_list) > 0:
            loop_ran = 0
            for l_index in range(len(self.alert_labels_list), 0, -1):
                temp_label = self.alert_labels_list[l_index-1]
                new_ay = self.label_height + 31    # 31 is the y pos for first label while label height is self defined variable that contains the set height which in this case is 80. 
                self.label_height = new_ay
                temp_label.setGeometry(11, new_ay, 430, 80)


        self.x_label.setGeometry(11, 31, 430, 80) # x_label is the new label being added.

        self.label_height = 80

        [...]
        # code which sets the label
        [...]

        self.alert_labels_list.append(self.x_label)

這里的想法是,從最高索引開始,我們將遇到最新的標簽(警報),並通過將(固定的,定義的)label 高度添加到上一個 ZD304BA20E96D874311588EEC 的 y position 上. 我希望這是有道理的。 無論如何,上面的這個邏輯仍然不起作用,也許是因為布局不允許我自定義添加到其中的新小部件的 position 還是什么?

如果您能指導我如何解決這個問題,我將不勝感激! 謝謝!

非常感謝@musicamante,他的評論包含了答案。 我將在這里引用他,“ ...如果您使用的是盒子布局並想在“開始”處插入小部件,請使用layout.insertWidget(0, widget)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM