在QLineEdit小部件上调用.text()时PYQT5崩溃

时间:2018-03-12 19:16:25

标签: python pyqt pyqt5

当我运行下面的代码时,我的程序崩溃了,我相信这是在线编辑输入内容时调用的.text()。我需要为这里输入的内容分配一个变量。

import sys
from PyQt5.QtWidgets import *
from PyQt5 import QtWidgets

class loginScreen(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        usernameBox = QtWidgets.QLineEdit()
        usernameBox.textChanged.connect(self.myfunc)

        vArrangement = QtWidgets.QVBoxLayout()
        vArrangement.addWidget(usernameBox)
        self.setLayout(vArrangement)

        self.show()

    def myfunc(self):
        x = usernameBox.text()
        print(x)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = loginScreen()
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:1)

如果您发现usernameBox它被创建为局部变量,因此无法通过该类的其他方法访问它,在您的情况下有2个解决方案:

  • 创建该类的usernameBox属性。
class loginScreen(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.usernameBox = QtWidgets.QLineEdit()
        self.usernameBox.textChanged.connect(self.myfunc)

        vArrangement = QtWidgets.QVBoxLayout()
        vArrangement.addWidget(self.usernameBox)
        self.setLayout(vArrangement)

        self.show()

    def myfunc(self):
        x = self.usernameBox.text()
        print(x)
  • 或者使用sender()获取发出信号的对象,在您的情况下为QLineEdit
class loginScreen(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        usernameBox = QtWidgets.QLineEdit()
        usernameBox.textChanged.connect(self.myfunc)

        vArrangement = QtWidgets.QVBoxLayout()
        vArrangement.addWidget(usernameBox)
        self.setLayout(vArrangement)

        self.show()

    def myfunc(self):
        x = self.sender().text()
        print(x)