第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何從多選 QComboBox 中獲取選中的項(xiàng)目?

如何從多選 QComboBox 中獲取選中的項(xiàng)目?

一只萌萌小番薯 2021-11-09 15:36:20
我能夠使用 QComboBox 和 QStandardItemModel 實(shí)現(xiàn)多選,但我無法使用 selectedItems() 或 checkedItems() 選項(xiàng)獲取所選項(xiàng)目,該選項(xiàng)給出的錯(cuò)誤消息顯示為:AttributeError: 'QComboBox' object has no attribute 'selectedItems'               AttributeError: 'QComboBox' object has no attribute 'checkedItems'有沒有辦法獲取 QComboBox 的選定項(xiàng)目列表?下面是我的代碼的示例實(shí)現(xiàn)class CheckableComboBox(QComboBox):    def __init__(self):        super(CheckableComboBox, self).__init__()        self.view().pressed.connect(self.handleItemPressed)        self.setModel(QtGui.QStandardItemModel(self))    def handleItemPressed(self, index):        item = self.model().itemFromIndex(index)        if item.checkState() == QtCore.Qt.Checked:            item.setCheckState(QtCore.Qt.Unchecked)        else:            item.setCheckState(QtCore.Qt.Checked)class Dialog_01(QMainWindow):    def __init__(self):        super(QMainWindow,self).__init__()               years = ["2017", "2018", "2019", "2020"]        self.comboBoxv = QComboBox(self)        self.model = QtGui.QStandardItemModel(self)        firstItem = QtGui.QStandardItem("Select  Years")        firstItem.setBackground(QtGui.QBrush(QtGui.QColor(200, 200, 200)))        firstItem.setSelectable(False)        self.model.setItem(0, 0, firstItem)        for i,area in enumerate(years):            item = QtGui.QStandardItem(area)            item.setFlags(Qt.ItemIsUserCheckable | Qt.ItemIsEnabled)            item.setData(Qt.Unchecked, Qt.CheckStateRole)            self.model.setItem(i+1, 0, item)        self.comboBoxv.setModel(self.model)                self.comboBoxv.installEventFilter(self)if __name__ == '__main__':    app = QApplication(sys.argv)    dialog_1 = Dialog_01()    dialog_1.show()    dialog_1.resize(480,320)    sys.exit(app.exec_())
查看完整描述

1 回答

?
翻過高山走不出你

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊

checkedItems 方法不存在,因此您會(huì)收到該錯(cuò)誤。解決方案是迭代模型并驗(yàn)證它是否被檢查。


from PyQt5 import QtCore, QtGui, QtWidgets


class CheckableComboBox(QtWidgets.QComboBox):

    closedPopup = QtCore.pyqtSignal()


    def __init__(self, parent=None):

        super(CheckableComboBox, self).__init__(parent)

        self.setView(QtWidgets.QListView(self))

        self.view().pressed.connect(self.handleItemPressed)

        self.setModel(QtGui.QStandardItemModel(self))


        firstItem = QtGui.QStandardItem("Select  Years")

        firstItem.setBackground(QtGui.QBrush(QtGui.QColor(200, 200, 200)))

        firstItem.setSelectable(False)

        self.model().appendRow(firstItem)


    @QtCore.pyqtSlot(QtCore.QModelIndex)

    def handleItemPressed(self, index):

        item = self.model().itemFromIndex(index)

        if item.checkState() == QtCore.Qt.Checked:

            item.setCheckState(QtCore.Qt.Unchecked)

        else:

            item.setCheckState(QtCore.Qt.Checked)


    def checkedItems(self):

        l = []

        for i in range(self.model().rowCount()):

            it = self.model().item(i)

            if it.checkState() == QtCore.Qt.Checked:

                l.append(it.text())

        return l


    def hidePopup(self):

        self.closedPopup.emit()

        super(CheckableComboBox, self).hidePopup()

        QtCore.QTimer.singleShot(0, lambda: self.setCurrentIndex(0))


class Dialog_01(QtWidgets.QMainWindow):

    def __init__(self):

        super(Dialog_01,self).__init__()       

        years = ["2017", "2018", "2019", "2020"]

        self.comboBoxv = CheckableComboBox()

        self.comboBoxv.closedPopup.connect(self.on_closedPopup)

        for i, area in enumerate(years):

            item = QtGui.QStandardItem(area)

            item.setCheckable(True)

            item.setCheckState(QtCore.Qt.Unchecked)

            self.comboBoxv.model().appendRow(item)


        central_widget = QtWidgets.QWidget()

        self.setCentralWidget(central_widget)

        lay = QtWidgets.QVBoxLayout(central_widget)

        lay.addWidget(self.comboBoxv)

        lay.addStretch()


    @QtCore.pyqtSlot()

    def on_closedPopup(self):

        print(self.comboBoxv.checkedItems())


if __name__ == '__main__':

    import sys

    app = QtWidgets.QApplication(sys.argv)

    dialog_1 = Dialog_01()

    dialog_1.show()

    dialog_1.resize(480,320)

    sys.exit(app.exec_())


查看完整回答
反對(duì) 回復(fù) 2021-11-09
  • 1 回答
  • 0 關(guān)注
  • 446 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)