PYQT5 QLineEdit焦点事件触发
pyqt 的QLineEdit 如何使用 焦点移出信号?
如何重载
focusOutEvent() 这个信号?
因为QLineEdit本身不带这signal
求大侠指导!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
pyqt 的QLineEdit 如何使用 焦点移出信号?
如何重载
focusOutEvent() 这个信号?
因为QLineEdit本身不带这signal
求大侠指导!!
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
看他的父类的信号啊,应该QWidget是有这个信号的
请输入用户名的控制,当鼠标移进时,自动清空,当没有输入值时自动显示提示:
使用过滤器,
各位大侠还有没有更好的办法!!
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'D:workspacesqtguiHQPostestui.ui'
#
# Created by: PyQt5 UI code generator 5.5
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
class Ui_Dialog(QtWidgets.QDialog):
# inp_text_signal = QtCore.pyqtSignal(str) #定义信号
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(400, 300)
Dialog.setSizeGripEnabled(True)
self.l2=QtWidgets.QLineEdit(Dialog)
self.lineEdit = QtWidgets.QLineEdit(Dialog)
#self.lineEdit.setFocusPolicy(True)
self.lineEdit.setGeometry(QtCore.QRect(120, 100, 133, 20))
self.lineEdit.setText("请输入用户名")
self.l2.setGeometry(QtCore.QRect(100, 80, 123, 20))
self.lineEdit.setObjectName("lineEdit")
self.lineEdit.installEventFilter(self)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
#self.inp_text_signal.connect(self.prn)
def prn(self, str):
print(str)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
def eventFilter(self, obj, event):
if obj == self.lineEdit:
if event.type()== QEvent.FocusIn:
#self.inp_text_signal.emit("已进")
if self.lineEdit.text().strip() == '请输入用户名':
self.lineEdit.clear()
print("ok1")
elif event.type()== QEvent.FocusOut:
if self.lineEdit.text().strip() == '':
self.lineEdit.setText("请输入用户名")
print("ok2")
else:
pass
return False
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
以上是针对整个面板的。 应该使用过滤器
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMessageBox
import sys
#重载函数,并定义信号,以便主程序处理
class MyLineEdit(QtWidgets.QLineEdit):
inp_text_signal = QtCore.pyqtSignal(str) #定义信号
def __init__(self, parent):
super(MyLineEdit,self).__init__(parent)
def mouseDoubleClickEvent(self,e):
print( 'mouse double clicked' )
def mousePressEvent(self,e):
print('mousePressEvent')
def focusInEvent(self,e):
print( 'focusInEvent')
def focusOutEvent(self,e):
self.inp_text_signal.emit("移出") #发送信号
def moveEvent(self,e):
print( 'moveEvent')
def leaveEvent(self,e): #鼠标离开label
print( 'leaveEvent')
def enterEvent(self,e): #鼠标移入label
print( 'enterEvent')
def mouseMoveEvent(self,e):
print( 'mouseMoveEvent')
class TestDialog(QtWidgets.QDialog):
def __init__(self,parent=None):
super(TestDialog,self).__init__(parent)
self.statusLabel = MyLineEdit(self)
self.statusLabel.setGeometry(QtCore.QRect(95, 220, 151, 41))
self.statusLabel.setText("hello label")
self.statusLabel.inp_text_signal.connect(self.sfocus) #绑定槽函数
def sfocus(self, str):
print(str)
QMessageBox.warning(self,
"警告",
"用户名或密码错误!",
QMessageBox.No)
self.close()
app = QtWidgets.QApplication(sys.argv)
dialog=TestDialog()
dialog.show()
sys.exit(app.exec_())