【问题标题】:How to access a QLineEdit inside a cellWidget?如何访问 cellWidget 中的 QLineEdit?
【发布时间】:2020-11-11 05:37:43
【问题描述】:

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

这就是我要找的:

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

【问题讨论】:

    标签: python python-3.x pyqt pyqt5 qtablewidget


    【解决方案1】:

    如果您想使用 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")
    

    【讨论】:

      猜你喜欢
      • 2020-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-22
      • 1970-01-01
      相关资源
      最近更新 更多