python - PyQt5 : get index of cell widgets and their chosen values

标签 python pyqt signals-slots qtablewidget qcombobox

我正在使用 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)

我需要知道以下事情:

  • 如何连接所有组合框的信号?
  • 如何获取所选组合框的索引?
  • 选择组合框选项后如何获取其索引?

最佳答案

代码说明

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 ###################

def dosomething(index):
    widget = app.sender()
    print('widget object:', widget)
    print('widget myname:', widget.my_name)
    print('widget index:', combo_list.index(widget))
    print('option index:', index)

#---------------------------------------------------------------------

names = ['Name 1', 'Name 2', 'Name 3', 'Name 4']
combo_option_list = ["Choose...", "Option 1", "Option 2", "Option 3", "Option 4"]

combo_list = []

for i, name in enumerate(names):

    tableWidget.setItem(i, 0, QtWidgets.QTableWidgetItem(name))

    combobox = QtWidgets.QComboBox()
    combobox.addItems(combo_option_list)
    combobox.my_name = name + ' (i=' + str(i) + ')'
    combobox.currentIndexChanged.connect(dosomething)

    combo_list.append(combobox)

    tableWidget.setCellWidget(i, 1, combobox)

#---------------------------------------------------------------------

sys.exit(app.exec_())

dosomething 中,您可以使用 app.sender() 来获取被单击的小部件 - 然后您可以使用它对该小部件执行某些操作。

PyQt 使用参数执行 dosomething - 它是组合框中所选选项的索引。

要获取 combo_listwidget 的索引,您可以使用标准列表方法 combo_list.index(widget)

但是您也可以在组合框中创建自己的变量(即my_name)来保留索引或其他值

combobox.my_name = some_value

稍后您可以进入dosomething

value = widget.my_name

顺便说一句:

您可以使用 addItems(option_list) 代替 addItem(one_option)for 循环

您可以使用enumerate(names),并且不需要i = 0i += 1

for i, j in enumerate(names):

您可以在 for 循环之前创建 combo_option_list

关于python - PyQt5 : get index of cell widgets and their chosen values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39814304/

相关文章:

python - 在Python中从Doc2Vec中提取特征

python - 当我将它与 Selenium 一起使用时,PyQt 进度条不起作用

python - 从QIODevice.read()读取数据后如何处理?

qt - 连接到 QtScript(在 Qt 4.5.2 上)中的信号的函数不会触发

qt - 是否可以使用 "this"从派生对象的基类发出信号

python 在单击的 QTreeview 项目复选框上发出信号已更改

python - 我怎样才能在我的模板中获取 JSONfield 的值

python - 使用 Numpy 向量化 for 循环

python - PyQt拦截不继承的关闭事件

python - 如何将变量从 PyQt5 UI 返回到 Main 函数 - Python