要检查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_())
对我来说,创建一个新的类来做你的验证是很混乱的。我会让 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
方法被重复调用。为了防止这种情况,你必须做以下工作之一。
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
的类,你可以向 启动 方法。