加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – Pyside – 当QLineEdit获得焦点时选择所有文本

发布时间:2020-12-20 12:06:13 所属栏目:Python 来源:网络整理
导读:我是Qt / PySide的新手.我希望QLineEdit在获得焦点时选择其中的所有文本.在获得焦点并选择所有文本后,只有在焦点丢失并再次获得后才能选择所有文本.在QLineEdit获得焦点后更改光标位置时,不应选择所有文本.我怎么做? 更新:我的当前代码改进了Ashwani Kumar
我是Qt / PySide的新手.我希望QLineEdit在获得焦点时选择其中的所有文本.在获得焦点并选择所有文本后,只有在焦点丢失并再次获得后才能选择所有文本.在QLineEdit获得焦点后更改光标位置时,不应选择所有文本.我怎么做?

更新:我的当前代码改进了Ashwani Kumar的建议.我仍然无法让它工作:

import sys
from PySide.QtGui import QLineEdit,QApplication,QVBoxLayout,QWidget
class MyLineEdit(QLineEdit):
    def __init__(self,parent=None):
        super(MyLineEdit,self).__init__(parent)

    def focusInEvent(self,e):
        self.selectAll()      

app = QApplication(sys.argv)
top = QWidget()
layout = QVBoxLayout()
layout.addWidget(MyLineEdit())
layout.addWidget(MyLineEdit())
top.setLayout(layout)
top.show()
app.exec_()

解决方法

使用focusInEvent,当您单击窗口小部件时,它将被执行,但是在您单击后,它将删除所选文本.

要克服这一点,我们必须使用mousePressEvent,这可以通过两种方式完成:

import sys
from PySide.QtGui import QLineEdit,self).__init__(parent)

    def mousePressEvent(self,e):
        self.selectAll()      

app = QApplication(sys.argv)
top = QWidget()
layout = QVBoxLayout()
layout.addWidget(MyLineEdit())
layout.addWidget(MyLineEdit())
top.setLayout(layout)
top.show()
app.exec_()

或者您可以通过简单地覆盖基本QLineEdit类来实现:

txt_demo = QtGui.QLineEdit()
txt_demo.mousePressEvent = lambda _ : txt_demo.selectAll()

但是,由于我们正在修改mousePressEvent,因此每当您尝试单击文本时,它将始终首先选择所有文本.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读