【问题标题】:How can I get the value of a QComboBox that is part of a custom QListWidgetItem using self.myQListWidget.itemSelectionChanged.connect()?如何使用 self.myQListWidget.itemSelectionChanged.connect() 获取作为自定义 QListWidgetItem 一部分的 QComboBox 的值?
【发布时间】:2018-12-26 01:13:58
【问题描述】:

我有一个 QListWidget,其中填充了从自定义小部件生成的项目的多个实例。此自定义小部件包含一个 QComboBox。我有它,所以当任何 QComboBoxes 发生更改时,底部的图都会更新,但是当用户选择列表中的特定行时,如何进行图更新?我不知道如何获取所选项目的 QComboBox 的当前值。

class MainWidget(QWidget):

    def showselection(self):

        # get current selection from QComboBox for selected item
        # run self.bias_graph.updateplot passing in current selection

    def __init__(self, parent):

        super().__init__(parent)

        grid = QGridLayout()

        self.bias_graph = BiasGraph(self, width=5, height=4)

        self.multiplexerList = QListWidget()

        for i in range(10):

            item = QListWidgetItem(self.multiplexerList)
            itemWidget = MultiplexerListItem(self.bias_graph, i)
            item.setSizeHint(itemWidget.sizeHint())
            self.multiplexerList.addItem(item)
            self.multiplexerList.setItemWidget(item, itemWidget)

        self.multiplexerList.itemSelectionChanged.connect(self.showselection)

        heading1 = QLabel('Multiplexer')
        heading2 = QLabel('Waveform')
        heading1.setFixedHeight(50)
        heading2.setFixedHeight(50)

        grid.addWidget(heading1, 0, 0)
        grid.addWidget(heading2, 0, 1)
        grid.addWidget(self.multiplexerList, 1, 0, 1, 2)

        bottomleft = self.bias_graph

        grid.addWidget(bottomleft, 11, 0)

        self.setLayout(grid)

        self.show()

class MultiplexerListItem(QWidget):

    def __init__(self, main_plot, i,  parent = None):

        super().__init__(parent)

        grid = QGridLayout()

        grid.addWidget(QLabel(str(i + 1)), 0, 0)

        waveselect = QComboBox()
        waveselect.addItem("A")
        waveselect.addItem("B")
        waveselect.activated[str].connect(main_plot.updateplot)
        grid.addWidget(waveselect, 0, 1)

        self.setLayout(grid)

class BiasGraph(FigureCanvas):

    def __init__(self, parent = None, width=5, height=4, dpi=100):

        fig = Figure(figsize = (width, height), dpi = dpi)
        self.axes = fig.add_subplot(111)

        FigureCanvas.__init__(self, fig)
        self.setParent(parent)

        FigureCanvas.setSizePolicy(self,
            QSizePolicy.Expanding,
            QSizePolicy.Expanding)
        FigureCanvas.updateGeometry(self)

        default = []
        A = [0, 0, -1, -2, -3, -2, -1, 0, 0]
        B = [0, 0, 1, 2, 3, 2, 1, 0, 0]
        self.data = {"A" : A, "B" : B}

        self.plot(default)

    def updateplot(self, text):

        self.plot(self.data[text])

    def plot(self, X):

        self.axes.clear()
        ax = self.figure.add_subplot(111)
        ax.plot(X, 'r-')
        ax.set_title('Bias Waveform')
        self.draw()

【问题讨论】:

    标签: python pyqt pyqt5 qcombobox qlistwidget


    【解决方案1】:

    首先你必须使用currentItem()获取选中的item,然后widget使用itemWidget(),这将返回一个与item关联的MultiplexerListItem,但是目前很难获取QComboBox,到为此,您必须使 QComboBox 成为 MultiplexerListItem 类的成员。然后访问QComboBox 和相应的文本。

        def showselection(self):
            it = self.multiplexerList.currentItem()
            widget = self.multiplexerList.itemWidget(it)
            combo = widget.waveselect
            print(combo.currentText())
    
    ...
    
    class MultiplexerListItem(QWidget):
        def __init__(self, main_plot, i,  parent = None):
            super().__init__(parent)
            grid = QGridLayout()
            grid.addWidget(QLabel(str(i + 1)), 0, 0)
            self.waveselect = QComboBox()
            self.waveselect.addItems(["A", "B"])
            self.waveselect.activated[str].connect(main_plot.updateplot)
            grid.addWidget(self.waveselect, 0, 1)
            self.setLayout(grid)
    

    【讨论】:

      猜你喜欢
      • 2019-03-02
      • 2016-05-02
      • 2014-11-02
      • 2021-08-21
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多