如何使用 self.myQListWidget.itemSelectionChanged.connect() 获取作为自定义 QListWidgetItem 一部分的 QComboBox 的值?
How can I get the value of a QComboBox that is part of a custom QListWidgetItem using self.myQListWidget.itemSelectionChanged.connect()?
我有一个 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()
首先你必须使用 currentItem()
获取所选项目,然后使用 itemWidget()
获取小部件,这将 return 一个 MultiplexerListItem
与该项目相关联,但目前将很难获得 QComboBox
,为此您必须使 QComboBox
成为 MultiplexerListItem
class 的成员。然后访问 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)
我有一个 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()
首先你必须使用 currentItem()
获取所选项目,然后使用 itemWidget()
获取小部件,这将 return 一个 MultiplexerListItem
与该项目相关联,但目前将很难获得 QComboBox
,为此您必须使 QComboBox
成为 MultiplexerListItem
class 的成员。然后访问 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)