【发布时间】:2017-02-10 09:02:38
【问题描述】:
我使用的是 Python 3.5,并且我有一个简单的代码,它可以创建一个包含几个组合框的表格。代码如下:
from PyQt5 import QtCore
from PyQt5 import QtWidgets
import sys
app = QtWidgets.QApplication(sys.argv)
########################## Create table ##############################
tableWidget = QtWidgets.QTableWidget()
tableWidget.setGeometry(QtCore.QRect(200, 200, 250, 300))
tableWidget.setColumnCount(2)
tableWidget.setRowCount(9)
tableWidget.show()
################# Create tablecontent & comboboxes ###################
names = ['Name 1', 'Name 2', 'Name 3', 'Name 4']
i = 0
for j in names:
tableWidget.setItem(i, 0, QtWidgets.QTableWidgetItem(j))
comboBox = QtWidgets.QComboBox()
combo_option_list = ["Choose...", "Option 1", "Option 2", "Option 3", "Option 4"]
for t in combo_option_list:
comboBox.addItem(t)
tableWidget.setCellWidget(i, 1, comboBox)
i += 1
sys.exit(app.exec_())
我想使用这些组合框,但我有几个问题。它已经从我只能通过以下命令使用最后创建的组合框这一事实开始:
comboBox.activated[str].connect(do_something)
我需要知道以下几点:
- 如何连接所有组合框的信号?
- 如何获取选中的组合框的索引?
- 选中的组合框选项被选中后如何获取其索引?
【问题讨论】:
-
您可以将所有组合框保留在列表中以访问所有 -
combobox_list.append(comboBox)。您可以将自己的变量分配给组合框,即。comboBox.my_index = i。顺便说一句:更多pythonic方式for i, j in enumerate(names): -
@furas 谢谢!这对我有一点帮助。
combobox_list[n_box].currentIndexChanged.connect(do_something)但是combobox_list被点击后如何获取索引呢? -
在
do_something()你可以直接获取小部件 -widget = event.sender()并且你不需要它的索引。现在你可以做即。widget.addItem("Other Option"),print(widget.my_index), 或获取选定选项widget.currentText()等。如果您需要索引并且您没有创建comboBox.my_index,那么您可以尝试标准列表功能,如combobox_list.index(widget)或if widget in combobox_list。 -
我试过你的代码,当你不像zetcode.com/gui/pyqt5/widgets2那样创建类时,它的工作方式似乎有所不同
-
您必须在
do_something中使用widget = app.sender()才能获取小部件。 PyQt 使用参数index调用do_something(index)- 所以你有所选选项的索引。
标签: python pyqt signals-slots qtablewidget qcombobox