[Python] QWidget does not update when the slot is called in PySide

Discussão em 'Python' iniciado por Stack, Fevereiro 24, 2025.

  1. Stack

    Stack Membro Participativo

    Sorry if this sounds like a dummy question, I am new to PySide. I want to create two QListWidgets in a single layout after a clicked signal is emitted. However, the lists do not appear as expected when the button is pressed.

    Here is my code:

    import sys
    import random
    from PySide6.QtWidgets import QApplication, QWidget, QLineEdit, QListWidget, QHBoxLayout, QListWidgetItem
    from PySide6 import QtCore, QtWidgets
    from PySide6.QtCore import Slot

    class Widget(QWidget):
    def __init__(self, parent=None):
    super().__init__(parent)

    self.button = QtWidgets.QPushButton("Enter room")
    self.textfield = QLineEdit()

    self.layout = QtWidgets.QVBoxLayout(self)
    self.layout.addWidget(self.textfield)
    self.layout.addWidget(self.button)


    self.button.clicked.connect(self.connect)

    @Slot()
    def connect(self):
    room_id = self.textfield.text().strip()
    self.button.deleteLater()
    self.textfield.deleteLater()

    self.layout = QHBoxLayout()
    self.feed = QListWidget()
    self.online = QListWidget()

    self.online.addItem(QListWidgetItem("Oak"))
    self.online.addItem(QListWidgetItem("Fir"))
    self.online.addItem(QListWidgetItem("Pine"))

    self.feed.addItem(QListWidgetItem("Hello World"))

    self.layout.addWidget(self.feed)
    self.layout.addWidget(self.online)

    self.setLayout(self.layout)
    self.update() # does not update after button and textfield deletions

    if __name__ == "__main__":
    app = QApplication([])
    window = Widget()
    window.show()
    sys.exit(app.exec())


    I tried to draw the QWidgetLists in the constructor and it displayed as expected. I guess I am not correctly updating the main Widget.

    class Widget(QWidget):
    def __init__(self, parent=None):
    super().__init__(parent)

    self.layout = QHBoxLayout()
    self.feed = QListWidget()
    self.online = QListWidget()

    self.online.addItem(QListWidgetItem("Oak"))
    self.online.addItem(QListWidgetItem("Fir"))
    self.online.addItem(QListWidgetItem("Pine"))

    self.feed.addItem(QListWidgetItem("Hello World"))

    self.layout.addWidget(self.feed)
    self.layout.addWidget(self.online)

    self.setLayout(self.layout)
    self.update() # it works

    Continue reading...

Compartilhe esta Página