如何使用cellWidget处理来自QTableWidget单元格的信号

2024-10-01 15:48:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我曾经在QTableWidget上工作过,问题是如果单元格是由QTableWidgetItem设置的,那么信号“itemChanged”工作得很好,很容易获得行/列/文本,但是如果单元格是由QLineEdit这样的cellWidget设置的,那么信号“itemChanged”不起作用,信号“textChanged”或QLineEdit本身的其他功能起作用,但是如果有数百个QLineEdit,有没有可能像被改变的一样工作?请帮忙,谢谢

代码如下:

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_())

Tags: self信号defsystableprintlayoutsetitem
1条回答
网友
1楼 · 发布于 2024-10-01 15:48:04

一种可能的解决方案是不使用cellWidget,而是永久打开委托编辑器:

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())

相关问题 更多 >

    热门问题