Pyqt5 QtableWidget 和集成组合框在组合框项更改时无法调用函数
Pyqt5 QtableWidget and integrated combobox fails to call a function when combobox items change
我有以下代码:
import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
class tabdemo(QMainWindow):
def __init__(self):
super(tabdemo, self).__init__()
self.setGeometry(50,50,500,500)
self.centralWidget = QWidget()
self.setCentralWidget(self.centralWidget)
self.table()
self.mainHBOX_param_scene = QHBoxLayout()
self.mainHBOX_param_scene.addWidget(self.tableWidget)
self.centralWidget.setLayout(self.mainHBOX_param_scene)
def table(self):
self.tableWidget = QTableWidget()
self.tableWidget.setColumnCount(2)
self.tableWidget.setRowCount(5)
attr = ['one', 'two', 'three', 'four', 'five']
i = 0
for j in attr:
self.tableWidget.setItem(i, 0, QTableWidgetItem(j))
combobox = QComboBox()
for txt in ["Sinus","Triangle","Square"]:
combobox.addItem(txt)
self.tableWidget.setCellWidget(i, 1, combobox)
i += 1
self.tableWidget.itemChanged.connect(self.Table_itemchanged)
def Table_itemchanged(self):
print('Changed')
def main():
app = QApplication(sys.argv)
ex = tabdemo()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
它只是放置了一个Qtablewidget,其中一列是标签,另一列是组合框。
我想要做的是当我修改任何组合框的值时,我想调用一个函数,在这种情况下,在控制台中打印 'changed' 。
当我编辑 QtableWidget 的标签部分时,信号连接 self.tableWidget.itemChanged.connect(self.Table_itemchanged)
工作正常,但当我修改组合框项目时它失败了。
有谁能向我解释为什么以及是否存在解决我的问题的方法。
谢谢大家
使用组合框的 currentIndexChanged
信号。
您可以在组合框上设置 属性 来存储和恢复它属于哪一行(如果需要,也可以是列)。
for j in attr:
self.tableWidget.setItem(i, 0, QTableWidgetItem(j))
combobox = QComboBox()
for txt in ["Sinus","Triangle","Square"]:
combobox.addItem(txt)
combobox.setProperty('row', i)
combobox.currentIndexChanged.connect(self.Combo_indexchanged)
self.tableWidget.setCellWidget(i, 1, combobox)
i += 1
并添加一个新广告位:
def Combo_indexchanged(self):
combo = self.sender()
row = combo.property('row')
index = combo.currentIndex()
print('combo row %d indexChanged to %d' % (row, index))
我有以下代码:
import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
class tabdemo(QMainWindow):
def __init__(self):
super(tabdemo, self).__init__()
self.setGeometry(50,50,500,500)
self.centralWidget = QWidget()
self.setCentralWidget(self.centralWidget)
self.table()
self.mainHBOX_param_scene = QHBoxLayout()
self.mainHBOX_param_scene.addWidget(self.tableWidget)
self.centralWidget.setLayout(self.mainHBOX_param_scene)
def table(self):
self.tableWidget = QTableWidget()
self.tableWidget.setColumnCount(2)
self.tableWidget.setRowCount(5)
attr = ['one', 'two', 'three', 'four', 'five']
i = 0
for j in attr:
self.tableWidget.setItem(i, 0, QTableWidgetItem(j))
combobox = QComboBox()
for txt in ["Sinus","Triangle","Square"]:
combobox.addItem(txt)
self.tableWidget.setCellWidget(i, 1, combobox)
i += 1
self.tableWidget.itemChanged.connect(self.Table_itemchanged)
def Table_itemchanged(self):
print('Changed')
def main():
app = QApplication(sys.argv)
ex = tabdemo()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
它只是放置了一个Qtablewidget,其中一列是标签,另一列是组合框。
我想要做的是当我修改任何组合框的值时,我想调用一个函数,在这种情况下,在控制台中打印 'changed' 。
当我编辑 QtableWidget 的标签部分时,信号连接 self.tableWidget.itemChanged.connect(self.Table_itemchanged)
工作正常,但当我修改组合框项目时它失败了。
有谁能向我解释为什么以及是否存在解决我的问题的方法。 谢谢大家
使用组合框的 currentIndexChanged
信号。
您可以在组合框上设置 属性 来存储和恢复它属于哪一行(如果需要,也可以是列)。
for j in attr:
self.tableWidget.setItem(i, 0, QTableWidgetItem(j))
combobox = QComboBox()
for txt in ["Sinus","Triangle","Square"]:
combobox.addItem(txt)
combobox.setProperty('row', i)
combobox.currentIndexChanged.connect(self.Combo_indexchanged)
self.tableWidget.setCellWidget(i, 1, combobox)
i += 1
并添加一个新广告位:
def Combo_indexchanged(self):
combo = self.sender()
row = combo.property('row')
index = combo.currentIndex()
print('combo row %d indexChanged to %d' % (row, index))