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

时间:2019-12-17 15:38:14

标签: python pyqt5

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

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。在手机上输入代码时,我在这里删除了一部分代码。

1 个答案:

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