gpt4 book ai didi

python - 如何将已更改的 QComboBox 的单元格行检索为 QTableWidget 的 QCellWidget?

转载 作者:太空宇宙 更新时间:2023-11-04 05:21:59 25 4
gpt4 key购买 nike

我正在尝试获取 QTableWidget 中已更改的组合框的行和列。这是我的 table 的设置方式。查看底部以了解我正在尝试做什么。

def click_btn_mailouts(self):

self.cur.execute("""SELECT s.StudentID, s.FullName, m.PreviouslyMailed, m.nextMail, m.learnersDate, m.RestrictedDate, m.DefensiveDate FROM
StudentProfile s LEFT JOIN Mailouts m ON s.studentID=m.studentID""")
self.all_data = self.cur.fetchall()

self.table.setRowCount(len(self.all_data))
self.tableFields = ["Check","Full name","Previously mailed?","Next mail","learners date","Restricted date","Defensive driving date"]
self.columnList = ["StudentID","FullName","PreviouslyMailed","NextMail","learnersDate","RestrictedDate","DefensiveDate"]
self.table.setColumnCount(len(self.tableFields))
self.table.setHorizontalHeaderLabels(self.tableFields)
self.checkbox_list = []
for i, item in enumerate(self.all_data):
FullName = QtGui.QTableWidgetItem(str(item[1]))
PreviouslyMailed = QtGui.QComboBox()
PreviouslyMailed.addItem("Yes")
PreviouslyMailed.addItem("No")
LearnersDate = QtGui.QTableWidgetItem(str(item[3]))
RestrictedDate = QtGui.QTableWidgetItem(str(item[4]))
DefensiveDate = QtGui.QTableWidgetItem(str(item[5]))
NextMail = QtGui.QTableWidgetItem(str(item[6]))
self.table.setItem(i, 1, FullName)
self.table.setCellWidget(i, 2, PreviouslyMailed)
self.table.setItem(i, 3, LearnersDate)
self.table.setItem(i, 4, RestrictedDate)
self.table.setItem(i, 5, DefensiveDate)
self.table.setItem(i, 6, NextMail)
chkBoxItem = QtGui.QTableWidgetItem()
chkBoxItem.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
chkBoxItem.setCheckState(QtCore.Qt.Unchecked)
self.checkbox_list.append(chkBoxItem)
self.table.setItem(i, 0, self.checkbox_list[i])
FullName.setFlags(FullName.flags() & ~Qt.ItemIsEditable)
NextMail.setFlags(NextMail.flags() & ~Qt.ItemIsEditable)

"""Heres what I am trying to do:"""
PreviouslyMailed.currentIndexChanged.connect(self.comboBox_change(self.table.cellWidget(row,1).currentText()))
"""I want 'row' to be the row that has the combobox that has been changed."""

最佳答案

如果我理解正确,附加信号时 i 将是您要发送的行的值(或者,可能是 i+1?)。您可以使用包装函数或 lambda 轻松地使用 Qt 信号发送附加数据,如下所示:

for a in range(5):
x = QComboBox()
x.currentIndexChanged.connect( lambda i: my_other_function(i, another_var) )

在这里,我们将 lambda 连接到信号,当它被调用时,内部函数将依次调用额外数据。这在功能上等同于:

def my_wrapper(i):
my_other_function(i, another_var)

for a in range(5):
x = QComboBox()
x.currentIndexChanged.connect( my_wrapper )

但是,如果您尝试这样做,您会发现这并不总是有效。如果您尝试将变量 a 传递给内部函数,它将始终设置为循环结束时的值 a .

for a in range(5):
x = QComboBox()
x.currentIndexChanged.connect( lambda i: my_other_function(i, a) ) # a will always be 4

您可以通过每次将 a 的值重新绑定(bind)到一个新变量来解决这个问题——最简单的方法是将它作为命名参数传递给 lambda。例如——

for a in range(5):
x = QComboBox()
x.currentIndexChanged.connect( lambda i, a=a: my_other_function(i, a) ) # Each combo will send the index, plus the value of a

您应该能够使用上面的方法为您创建的每个 QComboBox 发送正确的 row 值。

关于python - 如何将已更改的 QComboBox 的单元格行检索为 QTableWidget 的 QCellWidget?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39976078/

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