Reputation: 37
I have worked on QTableWidget,the question is if cell was set by QTableWidgetItem the signal 'itemChanged' works well which easily get row/column/text, but if the cell was set by cellWidget like QLineEdit then singal 'itemChanged' doesn't work, singal 'textChanged' or else from QLineEdit itself works, but it's too hard if hundreds of QLineEdit, is it possible to work like itemChanged? please help, thank you.
Code as below:
import sys
from PyQt5.QtWidgets import *
class Table(QWidget):
def __init__(self):
super(Table, self).__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("QTableWidget Example")
self.resize(400,300)
self.layout=QHBoxLayout()
self.TableWidget=QTableWidget(4,3)
self.TableWidget.setHorizontalHeaderLabels(['Nmae','Sex','Weight(kG)'])
# self.newItem=QTableWidgetItem('Jack')
# self.TableWidget.setItem(0,0,self.newItem)
# self.newItem=QTableWidgetItem('Male')
# self.TableWidget.setItem(0,1,self.newItem)
# self.newItem=QTableWidgetItem('160')
# self.TableWidget.setItem(0,2,self.newItem)
self.newItem=QLineEdit('Jack')
self.TableWidget.setCellWidget(0,0,self.newItem)
self.newItem.textChanged.connect(self.txtChange)
self.newItem=QLineEdit('Male')
self.TableWidget.setCellWidget(0,1,self.newItem)
self.newItem=QLineEdit('160')
self.TableWidget.setCellWidget(0,2,self.newItem)
self.layout.addWidget(self.TableWidget)
self.setLayout(self.layout)
self.TableWidget.itemChanged.connect(self.changeTest)
def changeTest(self,item):
# print('test')
print(item.text())
def txtChange(self,txt):
print(txt)
if __name__ == '__main__':
app=QApplication(sys.argv)
win=Table()
win.show()
sys.exit(app.exec_())
Upvotes: 1
Views: 799
Reputation: 244282
One possible solution is not to use cellWidget but to permanently open the delegate editors:
class StyledItemDelegate(QStyledItemDelegate):
def createEditor(self, parent, option, index):
return QLineEdit(parent)
class Table(QWidget):
def __init__(self):
super(Table, self).__init__()
self.initUI()
def initUI(self):
self.setWindowTitle("QTableWidget Example")
self.resize(400, 300)
self.tableWidget = QTableWidget(4, 3)
delegate = StyledItemDelegate(self)
self.tableWidget.setItemDelegate(delegate)
self.tableWidget.setHorizontalHeaderLabels(["Nmae", "Sex", "Weight(kG)"])
self.tableWidget.itemChanged.connect(self.changeTest)
lay = QHBoxLayout(self)
lay.addWidget(self.tableWidget)
it = QTableWidgetItem("Jack")
self.tableWidget.setItem(0, 0, it)
self.tableWidget.openPersistentEditor(it)
it = QTableWidgetItem("Male")
self.tableWidget.setItem(0, 1, it)
self.tableWidget.openPersistentEditor(it)
it = QTableWidgetItem("160")
self.tableWidget.setItem(0, 2, it)
self.tableWidget.openPersistentEditor(it)
def changeTest(self, item):
print(item.text())
Upvotes: 2