Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在cellWidget中访问QLineEdit?_Python_Python 3.x_Pyqt_Pyqt5_Qtablewidget - Fatal编程技术网

Python 如何在cellWidget中访问QLineEdit?

Python 如何在cellWidget中访问QLineEdit?,python,python-3.x,pyqt,pyqt5,qtablewidget,Python,Python 3.x,Pyqt,Pyqt5,Qtablewidget,我尝试访问QLineEdit,它位于QTableWidget的单元格内,以便能够向每个单元格发送.text()值,但我不知道如何访问QLineEdit的.text()属性: 这就是我要找的: for row in range(self.Table.rowCount()): for column in range(self.Table.columnCount()): widget = self.Table.item(row,column) if isinst

我尝试访问QLineEdit,它位于QTableWidget的单元格内,以便能够向每个单元格发送.text()值,但我不知道如何访问QLineEdit的.text()属性:

这就是我要找的:

for row in range(self.Table.rowCount()):
    for column in range(self.Table.columnCount()):
        widget = self.Table.item(row,column)
        if isinstance(widget,QLineEdit)
            print(widget.objectName())
            widget.setText("text")
            list.append(widget.objectName())
但没用我希望你能帮我, 我附上完整的代码

from PyQt5.QtWidgets import QMainWindow,QApplication,QTableWidget,QTableWidgetItem,QWidgetItem,QLabel,QLineEdit,QVBoxLayout,QWidget

class Main(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

        self.Table = QTableWidget(self)
        self.Table.resize(400,300)
        self.Table.setColumnCount(5)
        self.Table.setRowCount(5)
        self.listw = []

        for row in range(3):
            for column in range(4):
                widget = QWidget()
                layout = QVBoxLayout()
                label = QLabel()
                label.setText("row "+str(row))
                line = QLineEdit()
                line.setPlaceholderText("text")
                layout.addWidget(label)
                layout.addWidget(line)
                widget.setLayout(layout)
                self.Table.setCellWidget(row,column,widget)

        self.Table.resizeRowsToContents()

        for row in range(self.Table.rowCount()):
            for column in range(self.Table.columnCount()):
                widget = self.Table.item(row,column)
                if isinstance(widget,QLineEdit):
                    print(widget.objectName())
                    widget.setText("some text")
                    self.listw.append(widget.objectName())

app = QApplication([])
m = Main()
m.show()
m.resize(800,600)
app.exec_()

如果要使用setCellWidget方法访问小部件集,则必须使用cellWidget()方法,但该方法将获取容器小部件而不是QLineEdit,因此如果要获取QLineEdit,可以使用findChild方法,但另一种方法是创建一个自定义小部件,其中包含小部件,并允许您获取每个元素:

class Widget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        self._label = QLabel()
        self._line = QLineEdit(placeholderText="text")

        lay = QVBoxLayout(self)
        lay.addWidget(self.label)
        lay.addWidget(self.line)

    @property
    def label(self):
        return self._label

    @property
    def line(self):
        return self._line


class Main(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

        self.Table = QTableWidget(self)
        self.Table.resize(400, 300)
        self.Table.setColumnCount(5)
        self.Table.setRowCount(5)
        self.listw = []

        for row in range(3):
            for column in range(4):
                widget = Widget()
                widget.label.setText("row " + str(row))
                self.Table.setCellWidget(row, column, widget)

        self.Table.resizeRowsToContents()

        for row in range(self.Table.rowCount()):
            for column in range(self.Table.columnCount()):
                widget = self.Table.cellWidget(row, column)
                if isinstance(widget, Widget):
                    widget.line.setText("some text")
更新: 使用findChild:

for row in range(self.Table.rowCount()):
    for column in range(self.Table.columnCount()):
        widget = self.Table.cellWidget(row, column)
        if isinstance(widget, QWidget):
            lineedit = widget.findChild(QLineEdit)
            if lineedit is not None:
                lineedit.setText("some text")

如果要使用setCellWidget方法访问小部件集,则必须使用cellWidget()方法,但该方法将获取容器小部件而不是QLineEdit,因此如果要获取QLineEdit,可以使用findChild方法,但另一种方法是创建一个自定义小部件,其中包含小部件,并允许您获取每个元素:

class Widget(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        self._label = QLabel()
        self._line = QLineEdit(placeholderText="text")

        lay = QVBoxLayout(self)
        lay.addWidget(self.label)
        lay.addWidget(self.line)

    @property
    def label(self):
        return self._label

    @property
    def line(self):
        return self._line


class Main(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

        self.Table = QTableWidget(self)
        self.Table.resize(400, 300)
        self.Table.setColumnCount(5)
        self.Table.setRowCount(5)
        self.listw = []

        for row in range(3):
            for column in range(4):
                widget = Widget()
                widget.label.setText("row " + str(row))
                self.Table.setCellWidget(row, column, widget)

        self.Table.resizeRowsToContents()

        for row in range(self.Table.rowCount()):
            for column in range(self.Table.columnCount()):
                widget = self.Table.cellWidget(row, column)
                if isinstance(widget, Widget):
                    widget.line.setText("some text")
更新: 使用findChild:

for row in range(self.Table.rowCount()):
    for column in range(self.Table.columnCount()):
        widget = self.Table.cellWidget(row, column)
        if isinstance(widget, QWidget):
            lineedit = widget.findChild(QLineEdit)
            if lineedit is not None:
                lineedit.setText("some text")