Для меня сбивает с толку создание нового класса для проверки. Я бы сделал checkstatus
методом Mainprg:
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_())
Приведенный выше код работает, но, вероятно, вам нужно что-то более общее c для более чем одного QLineEdit. Нет действительно хорошего способа передать аргументы в операторы соединения PyQt, поэтому большинство людей используют лямбды:
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
вызывается неоднократно. Чтобы предотвратить это, вы должны выполнить одно из следующих действий:
- создать обработчик для события focusChanged QApplication
- создать QValidator и применить его к своим виджетам, используя
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
классу, вы добавляете аргумент к init метод.