首先,我已经阅读了一些有关同一主题的查询,但与我的情况无关。这是我的代码片段:
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)
当我在小部件中输入输入并按Tab键移至下一个小部件时,结果将仅输出一个空字符串。我做错了吗?
P.S。在手机上输入代码时,我在这里删除了一部分代码。
答案 0 :(得分:2)
如果您认为出版物不是您可以做的最好的事情,那么最好花更多的时间,例如,由于存在很多错误,您提供的代码也不是最好的 < / p>
问题是您在创建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_())