Получение QtWidgets из моего пользовательского QListWidgetItem - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть собственный виджет (ProjectWidget), который представляет различные проекты для моего бизнеса, и они отображаются внутри QListWidget.Я хочу выбрать определенные проекты, используя флажок, чтобы сделать анализ их.

Когда я нажимаю кнопку «Анализ проектов», она вызывает функцию analysis (), которая выполняет итерацию по элементам QListWidgetitems QListWidget.

Я не могу понять, как получить доступ к виджетам, составляющим мойПользовательский виджет.В моем примере мне нужно проверить, установлен ли флажок на самом деле, и если да, получить текст метки от других виджетов, которые составляют мой пользовательский виджет.

Вот как выглядит программа: enter image description here

Код доступа:

#Custom Widget
class ProjectWidget(QWidget):
    def __init__(self, parent=None):
        super(ProjectWidget, self).__init__(parent)
        self.ui = Ui_Form()
        self.ui.setupUi(self)

    def addDetails(self, project):
        self.ui.projectNumber.setText(project.projectNumber)
        self.ui.projectDescription.setText(project.description)
        self.ui.closingDate.setText(project.closingDate)


class AppWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.show()

    def loadProjects(self):
        self.ui.listWidget.clear()

        print("loading projects")
        projects = WCA.getCurrentProjects(session)

        #Add custom widget to listwidget
        for x in range(len(projects)):
             #I create an Item*
            Item = QListWidgetItem(self.ui.listWidget)
            #I create a custom widget*
            Item_Widget = ProjectWidget()
            Item_Widget.addDetails(projects[x])
            #I set the Size from the Item to the same of the widget*
            Item.setSizeHint(Item_Widget.size())
            self.ui.listWidget.addItem(Item)
            self.ui.listWidget.setItemWidget(Item, Item_Widget)

        print(str(len(projects)) + " Projects loaded.")

    def analyze(self):
        print("Analyze projects")
        #Check if more than one project is selected
        for i in range(self.ui.listWidget.count()):
            item = self.ui.listWidget.item(i)
            #Check if the custom widget's checkbox is checked
            print(item)

1 Ответ

0 голосов
/ 26 сентября 2018

Вы должны использовать метод itemWidget(), передав QListWidgetItem, чтобы получить виджет:

def analyze(self):
    print("Analyze projects")
    #Check if more than one project is selected
    for i in range(self.ui.listWidget.count()):
        item = self.ui.listWidget.item(i)
        widget = self.ui.listWidget.itemWidget(item)
        if widget is not None:
            if widget.ui.name_of_checkbox.isChecked():
                print(widget)
...