网络编程
位置:首页>> 网络编程>> Python编程>> PyQt5实现QLineEdit添加clicked信号的方法

PyQt5实现QLineEdit添加clicked信号的方法

作者:sylgdxsgx  发布时间:2021-02-08 18:24:02 

标签:PyQt5,QLineEdit,clicked

大家都知道很多控件是没有clicked信号的,我在网上找了很多终于总结出2个方法来实现类似需求,比如给QLineEdit添加clicked信号,这样的话,当点击输入框时就会发送clicked信号,其它控件也是一样的做法,如下:

方法1:创建一个继承自QLineEdit的类,然后重写mousePressEvent。


class MyLineEdit(QLineEdit):
 clicked = pyqtSignal()
 def mouseReleaseEvent(self, QMouseEvent):
   if QMouseEvent.button()==Qt.LeftButton:
     self.clicked.emit()

方法2:重写eventFilter事件也可以达到类似的效果。


def eventFilter(self, widget, event):
 if widget == self.edit:
   if event.type() == QEvent.FocusOut:
     pass
   elif event.type() == QEvent.FocusIn:
     self.clicked.emit()   #当焦点再次落到edit输入框时,发送clicked信号出去
   else:
     pass
 return False

test.py


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

#方法1
class mylineedit(QLineEdit):
 clicked=pyqtSignal()  #定义clicked信号
 def mouseReleaseEvent(self, QMouseEvent):
   if QMouseEvent.button()==Qt.LeftButton:
     self.clicked.emit()   #发送clicked信号

class Wind(QDialog):
 clicked=pyqtSignal()
 def __init__(self):
   super().__init__()
   self.lnd=mylineedit()
   self.edit=QLineEdit()
   self.edit.installEventFilter(self)  #方法2(1)

vb=QVBoxLayout()
   vb.addWidget(self.lnd)
   vb.addWidget(self.edit)
   self.setLayout(vb)

self.lnd.clicked.connect(self.showData)
   self.clicked.connect(self.showData)   #该clicked信号是W1的信号而非edit的信号,但可以实现焦点落到edit时触发信号

# 方法2(2)
 def eventFilter(self, widget, event):
   if widget == self.edit:
     if event.type() == QEvent.FocusOut:
       pass
     elif event.type() == QEvent.FocusIn:
       self.clicked.emit()   #当焦点再次落到edit输入框时,发送clicked信号出去
     else:
       pass
   return False

def showData(self):
   print('ok')

if __name__=="__main__":
 app=QApplication(sys.argv)
 w=Wind()
 w.show()
 sys.exit(app.exec_())

来源:https://blog.csdn.net/sylgdxsgx/article/details/78517015

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com