gpt4 book ai didi

python - 从 PyQT5 检索 QtTableWidget 单元格的内容

转载 作者:行者123 更新时间:2023-12-01 08:21:51 25 4
gpt4 key购买 nike

我想在 QtTableWidget 中选择一些数据。我希望能够选择表的特定行,并根据所选行执行函数。该列并不重要。

这是我正在使用的数据示例

Id | Test name    | Owner | Script source
---|----------- |-------|--------------
1 | Login | 1 | test_login_s
2 | Logout | 1 | test_logout_s
3 | User > Edit | 1 | test_user_edit_s

以下所有代码均从retranslateUI中的这一行执行

self.btnRun.clicked.connect(self.run_selected_test)

最初,我尝试了以下方法:

row = self.tblTable.currentRow()
cell = self.tblTable.itemAt(row, 3).text()

无论选择哪个单元格,都会返回 1,即 0,0 处的单元格。看着QTableWidget class reference我注意到 itemAt 接受两个整数,并且如果指定点未被表格小部件中的项目覆盖,则返回 0。

接下来,我将代码稍微修改为:

cell = self.tblTable.itemAt(1, 1).text()

这并没有解决问题。

<小时/>

为了进一步测试这一点,我决定检查 currentRowcurrentColumn 是否按预期更新。

row = self.tblTable.currentRow()
> 4
> 17

column = self.tblTable.currentColumn()
> 0
> 6

我已经能够创建这样的解决方法

    if row == 0:
do_stuff()
elif row == 1:
do_stuff()
elif row == 2:
do_stuff()
elif row == 3:

此方法的问题是有超过 80 行。对于任何大于 5 的值来说,这似乎效率很低。

最佳答案

QTableWidgetItem *QTableWidget::item(int 行,int 列) const

如果已设置,则返回给定行和列的项目;否则返回0。

尝试一下:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class Example(QMainWindow):
def __init__(self, data):
super().__init__()
self.data = data
self.cols = len(self.data[0])
self.row, self.col = 0, 0
self.cell = []

centralWidget = QWidget()
self.setCentralWidget(centralWidget)

self.label = QLabel(alignment=Qt.AlignCenter)

self.tableWidget = QTableWidget(0, 4)
self.tableWidget.setHorizontalHeaderLabels(["Id", "Test name", "Owner", "Script source"])
self.tableWidget.cellClicked.connect(self.cellClick)
self.setTableWidget()

self.btnRun = QPushButton("btnRun")
self.btnRun.clicked.connect(self.run_selected_test)

lay = QGridLayout(centralWidget)
lay.addWidget(self.label, 0, 0)
lay.addWidget(self.tableWidget, 1, 0)
lay.addWidget(self.btnRun, 2, 0)

def run_selected_test(self):
self.cell = []
for col in range(self.cols):
self.cell.append(self.tableWidget.item(self.row, col).text()) # <---
self.label.setText("{}".format(" {} ; "*self.cols).format(*self.cell))

def cellClick(self, row, col):
self.row = row
self.col = col

def setTableWidget(self):
for r, (_id, _name, _owner, _script) in enumerate(self.data):
it_id = QTableWidgetItem(_id)
it_name = QTableWidgetItem(_name)
it_owner = QTableWidgetItem(_owner)
it_script = QTableWidgetItem(_script)

self.tableWidget.insertRow(self.tableWidget.rowCount())
for c, item in enumerate((it_id, it_name, it_owner, it_script)):
self.tableWidget.setItem(r, c, item)


data = [("1", "Login", "1", "test_login_s"),
("2", "Logout", "1", "test_logout_s"),
("3", "User > Edit", "1", "test_user_edit_s")]

if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example(data)
ex.setGeometry(300, 150, 450, 200)
ex.show()
sys.exit(app.exec_())

enter image description here

关于python - 从 PyQT5 检索 QtTableWidget 单元格的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54594819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com