PyQt5 : 如何通过传递 referenceValue 来检查我的文本框是否为空?

问题描述 投票:-1回答:1

要检查textbox1是否为空?如何传递reference?

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class My_Process(QWidget):
    def __init__(self,*args):
        self.textbox = QLineEdit()

    def checkstatus(self):
        if self.textbox.text() =="":
            print("Empty Value Not Allowed")
            self.textbox.setFocus()
        else:
            print(" Your Text : ",textbox.text())
#----------------------------------------------------------------------------------------------
class Mainprg(QMainWindow):
    def __init__(self):

        super().__init__()
        self.tb = My_Process(self)
        self.text1 = QLineEdit(self)
        self.text2 = QLineEdit(self)
        self.text1.setGeometry(100,100,300,30)
        self.text2.setGeometry(100,200,300,30)
        self.text1.editingFinished.connect(self.tb.checkstatus)

        self.showMaximized()

app = QApplication(sys.argv)
window = Mainprg()
sys.exit(app.exec_())
python pyqt pyqt5
1个回答
1
投票

对我来说,创建一个新的类来做你的验证是很混乱的。我会让 checkstatus 的一个方法。

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class Mainprg(QMainWindow):
    def __init__(self):

        super().__init__()
        self.text1 = QLineEdit(self)
        self.text2 = QLineEdit(self)

        self.setGeometry(300, 200, 600, 450)

        self.text1.setGeometry(100,100,300,30)
        self.text2.setGeometry(100,200,300,30)
        self.text1.editingFinished.connect(self.checkstatus)

        self.show()

    def checkstatus(self):
        if self.text1.text() == "":
            print("Empty Value Not Allowed")
            self.text1.setFocus()
        else:
            print(" Your Text : ", self.text1.text())

app = QApplication(sys.argv)
window = Mainprg()
sys.exit(app.exec_())

上面的代码是可行的,但是你可能想要一些更通用的东西,用于多个QLineEdit。没有真正好的方法来传递参数到PyQt连接语句,所以大多数人使用lambdas。

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class Mainprg(QMainWindow):
    def __init__(self):

        super().__init__()
        self.text1 = QLineEdit(self)
        self.text2 = QLineEdit(self)

        self.setGeometry(300, 200, 600, 450)

        self.text1.setGeometry(100,100,300,30)
        self.text2.setGeometry(100,200,300,30)
        self.text1.editingFinished.connect(lambda: self.checkstatus(self.text1))
        self.text2.editingFinished.connect(lambda: self.checkstatus(self.text2))

        self.show()

    def checkstatus(self, widget):
        if widget.text() == "":
            print("Empty Value Not Allowed")
            widget.setFocus()
        else:
            print(" Your Text : ", widget.text())

app = QApplication(sys.argv)
window = Mainprg()
sys.exit(app.exec_())

这段代码的工作方式更符合你的要求, 但是你会遇到一个问题,如果text1是空的,而你试图移动到text2. 你会得到一个 "超过了最大递归深度 "的消息,因为这个 checkstatus 方法被重复调用。为了防止这种情况,你必须做以下工作之一。

  1. 为QApplication的focusChanged事件做一个处理程序。
  2. 创建一个QValidator并将其应用到您的widget中,使用 setValidator()

如果你下定决心要做一个新的班级,你可以试试这个。

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class My_Process():
    def __init__(self, widget):
        self.textbox = widget

    def checkstatus(self):
        if self.textbox.text() == "":
            print("Empty Value Not Allowed")
            self.textbox.setFocus()
        else:
            print(" Your Text : ", self.textbox.text())

class Mainprg(QMainWindow):
    def __init__(self):

        super().__init__()

        self.text1 = QLineEdit(self)
        self.text2 = QLineEdit(self)

        self.process = My_Process(self.text1)

        self.setGeometry(300, 200, 600, 450)

        self.text1.setGeometry(100,100,300,30)
        self.text2.setGeometry(100,200,300,30)
        self.text1.editingFinished.connect(self.process.checkstatus)

        self.show()

app = QApplication(sys.argv)
window = Mainprg()
sys.exit(app.exec_())

要通过 text1 的类,你可以向 启动 方法。

© www.soinside.com 2019 - 2024. All rights reserved.