[英]Get text from a QLineEdit in a QFormLayout using itemAt
我目前正在开发一个程序,在QFormLayout中,我有两列QLineEdits。 我存储在列表中的第一列(意思是它们易于访问),而第二列不存储在变量或列表中。 我正在尝试在第二列中访问QLineEdits的文本,但我总是遇到错误。
我目前无意使用第二个列表/字典来授予对第二列的访问权限,因为使用getWidgetPosition和itemAt函数应该提供更容易的访问这些值的途径。
from PyQt5.QtWidgets import *
app = QApplication([])
window = QWidget()
layout = QFormLayout()
entry1 = QLineEdit()
layout.addRow(entry1,QLineEdit())
ePos = layout.getWidgetPosition(entry1)
text = layout.itemAt(ePos[1],ePos[0]+1).text()
print(text)
window.setLayout(layout)
window.show()
app.exec_()
上面的代码只是一个接近我正在尝试使用的代码的示例。 出于某种原因,访问QLineEdits第二列的文本是不可能的,因为我收到此错误消息:
Traceback (most recent call last):
File "sampleProblem.py", line 11, in <module>
text = layout.itemAt(ePos[1],ePos[0]+1).text()
AttributeError: 'QWidgetItem' object has no attribute 'text'
布局的itemAt()
方法返回一个QLayoutItem
, QLayoutItem
封装另一个布局或另一个小部件,然后获取小部件(在您的情况下为QLineEdit)您必须使用widget()
方法,然后才能获取文本。
import sys
from PyQt5 import QtWidgets
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QWidget()
layout = QtWidgets.QFormLayout(window)
entry1 = QtWidgets.QLineEdit()
layout.addRow(entry1, QtWidgets.QLineEdit())
i, j = layout.getWidgetPosition(entry1)
widget_item = layout.itemAt(i, j+1)
widget = widget_item.widget()
text = widget.text()
print(text)
window.show()
sys.exit(app.exec_())
好吧,我得到了一个稍微不同的答案,更多的答案的帮助,但我拿了代码,并做了以下:当打印文本失败时,我打印对象在这些坐标,并得到一个PyQt5.QtWidgets.QWidgetItem。 然后我通过查找QWidgetItem并获取其中一个已知属性并打印它来验证这一点。 所以,是的,虽然eyllanesc的答案很可能是正确的,但我希望这些附加信息可以帮助你更多。
from sys import exit as sysExit
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class MainWindow(QWidget):
def __init__(self):
QWidget.__init__(self)
self.LaidOut = QFormLayout()
self.Entry = QLineEdit()
self.LaidOut.addRow(self.Entry, QLineEdit())
self.setLayout(self.LaidOut)
ePos = self.LaidOut.getWidgetPosition(self.Entry)
print('EPos :',ePos)
# text = self.LaidOut.itemAt(ePos[1],ePos[0]+1).text()
print('Text :',self.LaidOut.itemAt(ePos[1],ePos[0]+1).isEmpty())
if __name__ == "__main__":
MainThred = QApplication([])
MainGUI = MainWindow()
MainGUI.show()
sysExit(MainThred.exec_())
仍然好奇为什么它更难以更复杂的方式?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.