PYQT5 QLineEdit焦点事件触发

发布于 2021-11-23 22:58:15 字数 157 浏览 846 评论 4

pyqt 的QLineEdit 如何使用  焦点移出信号?

如何重载  

focusOutEvent() 这个信号?

因为QLineEdit本身不带这signal  

求大侠指导!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

谁的新欢旧爱 2021-11-30 14:45:38

看他的父类的信号啊,应该QWidget是有这个信号的

倾城泪 2021-11-30 14:13:44

请输入用户名的控制,当鼠标移进时,自动清空,当没有输入值时自动显示提示:

使用过滤器,

各位大侠还有没有更好的办法!!

# -*- 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_())

筱武穆 2021-11-30 05:36:59

以上是针对整个面板的。 应该使用过滤器

挽清梦 2021-11-30 05:33:08

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_())

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文