首页 > 解决方案 > Python 从 QTablewidget 中检索 QComboBox

问题描述

我现在进入 Python 一个月,进入 QDesigner/Qt 半个月。在 QDesigner 中,我有一个 QTableWidget,我将其提升为我自己的 InputTable(QTableWidget) 类。

class InputTable(QTableWidget):
    def __init__(self, parent=None):
        self.parent = parent
        super(QTableWidget, self).__init__(parent)
...

我插入了一些 QComboboxes,允许用户选择表中值的单位。这是在 InputTable 类中的初始化。

pressureunits = [ "barg","bara", "psig", "psia"]
        pressurecombobox = QComboBox()
        for i in range(len(pressureunits)):
            pressurecombobox.addItem(pressureunits[i])
            self.setCellWidget(2, 0, pressurecombobox)

到目前为止,一切都很好。

现在我想将所有输入数据转换为一个并行表(主表),其值以 SI 单位表示,以便进一步分析。

units = self.tableInputs.cellWidget(2,0)
if units.currentIndex()==0:   # this means the combobox is at the first entry
    mastertable[0,2] = float(self.tableInputs.item(2,1).text())  

这失败了,因为单位是 QWidget 类型,它没有属性 currentIndex。在一些论坛上,我读到 QComboBox 是 QWidget 的子组件,我玩过 children() 函数,但这里没有解决方案。有人建议切换到 QTableView 结构。我整天都在寻找如何做到这一点,但还没有找到。有什么聪明的主意吗?

更新:从我的问题中减少所有复杂性后,我能够找到下面的解决方案。

from PyQt5.QtWidgets import QComboBox, QTableWidget, QTableWidgetItem

Mytable = QTableWidget(3,3)
Mytable.setItem(0, 0, QTableWidgetItem("1"))
print("Now retrieve the data :", Mytable.item(0, 0).text())

pressureunits = [ "barg","bara", "psig", "psia"]
pressurecombobox = QComboBox()
for i in range(len(pressureunits)):
    pressurecombobox.addItem(pressureunits[i])
    Mytable.setCellWidget(2, 0, pressurecombobox)
print("Now retrieve the active (first) entry :", Mytable.cellWidget(2,0).currentText())

标签: pythonqwidgetqtablewidgetqcombobox

解决方案


推荐阅读