【问题标题】:Getting QtWidgets from my custom QListWidgetItem从我的自定义 QListWidgetItem 获取 QtWidgets
【发布时间】:2019-03-02 11:55:20
【问题描述】:

我有一个自定义小部件 (ProjectWidget),它代表我的业务的不同项目,它们显示在 QListWidget 中。我想使用复选框选择某些项目来对它们进行分析。

当我单击分析项目按钮时,它会调用分析 () 函数,该函数遍历 QListWidget 的 QListWidgetitems。

我不知道如何访问组成我的自定义小部件的小部件。在我的示例中,我需要检查复选框是否确实被选中,如果是,则从构成我的自定义小部件的其他小部件中获取标签文本。

程序如下所示:

相关代码:

#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)

【问题讨论】:

    标签: python pyqt pyqt5 qlistwidget


    【解决方案1】:

    您必须使用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)
    

    【讨论】:

    • 哇,谢谢!我不敢相信我花了多少时间在这上面。我应该查看哪些文档才能使用 itemWidget()?
    • 非常感谢清晰、简洁和快速的帮助!你真棒。
    猜你喜欢
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 2018-12-26
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    相关资源
    最近更新 更多