为什么我的QLineEdit .text()返回一个空字符串



首先,我已经阅读了同一主题的一些查询,但与我的情况无关。这是我的一些代码片段:

class MyClass(QMainWindow):
def __init__(self):
super().__init__()
self.wid_dict = {"wid1": (0, 1), "wid2": (1,1)}
self.create()
def create(self):
for wid_name, value in self.wid_dict.items():
widget = QLineEdit()
widget.FinishedEditting.connect(partial(self.slots, widget.text()))
def slots(self, text):
print(text)

当我在小部件中编写输入并按选项卡转到下一个小部件时,结果只会打印一个空字符串。我做错了吗?

附言当我在手机中输入代码时,我在这里删除了一大块代码。

如果您认为您的出版物不是您可以做的最好的,那么最好花更多的时间,例如您提供的代码不是最好的,因为有很多错误


问题是您在创建 QLineEdit 后立即获得文本,它显然是一个空文本,一个可能的解决方案是传递小部件

from functools import partial
import sys
from PyQt5.QtWidgets import QApplication, QLineEdit, QMainWindow, QVBoxLayout, QWidget

class MyClass(QMainWindow):
def __init__(self):
super().__init__()
self.wid_dict = {"wid1": (0, 1), "wid2": (1, 1)}
self.create()
def create(self):
central_widget = QWidget()
self.setCentralWidget(central_widget)
lay = QVBoxLayout(central_widget)
for wid_name, value in self.wid_dict.items():
widget = QLineEdit()
widget.editingFinished.connect(partial(self.slots, widget))
lay.addWidget(widget)
def slots(self, widget):
print(widget.text())

if __name__ == "__main__":
app = QApplication(sys.argv)
w = MyClass()
w.show()
sys.exit(app.exec_())

另一种类似的方法是在插槽中使用sender((,这是一种返回发出信号的QObject的方法:

import sys
from PyQt5.QtWidgets import QApplication, QLineEdit, QMainWindow, QVBoxLayout, QWidget

class MyClass(QMainWindow):
def __init__(self):
super().__init__()
self.wid_dict = {"wid1": (0, 1), "wid2": (1, 1)}
self.create()
def create(self):
central_widget = QWidget()
self.setCentralWidget(central_widget)
lay = QVBoxLayout(central_widget)
for wid_name, value in self.wid_dict.items():
widget = QLineEdit()
widget.editingFinished.connect(self.slots)
lay.addWidget(widget)
def slots(self):
widget = self.sender()
print(widget.text())

if __name__ == "__main__":
app = QApplication(sys.argv)
w = MyClass()
w.show()
sys.exit(app.exec_())

相关内容

最新更新