在启动时发送 QComboBox 中项目的当前显示索引
Posted
技术标签:
【中文标题】在启动时发送 QComboBox 中项目的当前显示索引【英文标题】:Sending the current displayed index of item in QComboBox at start up 【发布时间】:2019-10-26 10:19:01 【问题描述】:使用signal and slots
方法获取QcomboBox
中选定项目的索引和文本是众所周知的。下面的代码就是一个例子。但是我如何告诉我的代码在启动时接收和发送第一个显示项,Activated, currentIndexChanged, Highlighted
之类的方法只能通过下拉列表QCombobox
工作。
输出:
1
item2
2
item3
示例代码:
from PyQt5 import QtCore, QtWidgets, QtGui
class Widget(QtWidgets.QWidget):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.setLayout(QtWidgets.QVBoxLayout())
combo = QtWidgets.QComboBox(self)
self.layout().addWidget(combo)
combo.addItems(["item1", "item2", "item3"])
combo.setMinimumWidth(150)
combo.activated[int].connect(self.onActivatedIndex)
combo.activated[str].connect(self.onActivatedText)
@QtCore.pyqtSlot(int)
def onActivatedIndex(self, index):
print(index)
@QtCore.pyqtSlot(str)
def onActivatedText(self, text):
print(text)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
【问题讨论】:
【参考方案1】:您可以制作自己的自定义信号并在对象的__init__
部分发出该信号。然后,此信号可以访问QComboBox
中的第一项。另一种方法可能是使用 singleShot 计时器,但制作自定义信号可能会更好。您可以使用currentIndex()
或currentText()
检索当前索引。
from PyQt5 import QtCore, QtWidgets, QtGui
class Widget(QtWidgets.QWidget):
startup = QtCore.pyqtSignal()
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.setLayout(QtWidgets.QVBoxLayout())
self.combo = QtWidgets.QComboBox(self)
self.layout().addWidget(self.combo)
self.combo.addItems(["item1", "item2", "item3"])
self.combo.setMinimumWidth(150)
self.combo.activated[int].connect(self.onActivatedIndex)
self.combo.activated[str].connect(self.onActivatedText)
self.startup.connect(self.current_index)
self.startup.emit()
@QtCore.pyqtSlot()
def current_index(self):
print(self.combo.currentIndex())
print(self.combo.currentText())
@QtCore.pyqtSlot(int)
def onActivatedIndex(self, index):
print(index)
@QtCore.pyqtSlot(str)
def onActivatedText(self, text):
print(text)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
【讨论】:
【参考方案2】:试试看:
from PyQt5 import QtCore, QtWidgets, QtGui
class Widget(QtWidgets.QWidget):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.setLayout(QtWidgets.QVBoxLayout())
self.combo = QtWidgets.QComboBox(self)
self.layout().addWidget(self.combo)
self.combo.addItems(["item1", "item2", "item3"])
self.combo.setMinimumWidth(150)
self.combo.activated[int].connect(self.onActivatedIndex)
self.combo.activated[str].connect(self.onActivatedText)
self.combo.activated.emit(1) # <---
@QtCore.pyqtSlot(int)
def onActivatedIndex(self, index):
print("\nindex->", index)
print("text ->", self.combo.itemText(index))
@QtCore.pyqtSlot(str)
def onActivatedText(self, text):
print(text)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
【讨论】:
以上是关于在启动时发送 QComboBox 中项目的当前显示索引的主要内容,如果未能解决你的问题,请参考以下文章
如何从 QComboBox 中获取所选项目以显示在 PyQt5 的 QTableWidget 中? (QComboBox 有复选框来选择项目)
使用排序的 QAbstractTableModel 时如何将“选择项目...”添加到 QComboBox?