如何访问 cellWidget 中的 QLineEdit?
How to access a QLineEdit inside a cellWidget?
我尝试访问 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_()
如果您想使用 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")
我尝试访问 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_()
如果您想使用 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")