QLineEdit 使用按钮显示从鼠标选择中选择的文本

2023-12-12

我想从 a 中获取选定的文本QLineEdit小部件。我们通过单击按钮来获取选定的文本。如果以编程方式选择文本,则它可以工作selectAll。但如果用鼠标选择文本则不起作用。在后一种情况下,显示空字符串。

为什么文本有如此大的差异以及如何让鼠标选择起作用?

#!/usr/bin/python

import sys
from PyQt5.QtWidgets import (QWidget, QLineEdit, QPushButton, QHBoxLayout,
    QVBoxLayout, QApplication, QMessageBox)
from PyQt5.QtCore import Qt


class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()


    def initUI(self):

        vbox = QVBoxLayout()
        hbox1 = QHBoxLayout()

        self.qle = QLineEdit(self)
        self.qle.setFocusPolicy(Qt.FocusPolicy.StrongFocus)
        self.qle.setText('There are 3 hawks in the sky')

        hbox1.addWidget(self.qle)

        selAllBtn = QPushButton('Select all', self)
        selAllBtn.clicked.connect(self.onSelectAll)

        deselBtn = QPushButton('Deselect', self)
        deselBtn.clicked.connect(self.onDeSelectAll)

        showSelBtn = QPushButton('Show selected', self)
        showSelBtn.clicked.connect(self.onShowSelected)

        hbox2 = QHBoxLayout()
        hbox2.addWidget(selAllBtn)
        hbox2.addSpacing(15)
        hbox2.addWidget(deselBtn)
        hbox2.addSpacing(15)
        hbox2.addWidget(showSelBtn)

        vbox.addLayout(hbox1)
        vbox.addSpacing(20)
        vbox.addLayout(hbox2)

        self.setLayout(vbox)

        self.setWindowTitle('Selected text')
        self.show()

    def onSelectAll(self):
        self.qle.selectAll()

    def onDeSelectAll(self):
        self.qle.deselect()

    def onShowSelected(self):
        QMessageBox.information(self, 'info', self.qle.selectedText())



def main():

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

If the 源代码修订为:

void QLineEdit::focusOutEvent(QFocusEvent *e)
{
    // ...
    Qt::FocusReason reason = e->reason();
    if (reason != Qt::ActiveWindowFocusReason &&
        reason != Qt::PopupFocusReason)
        deselect();
    // ...

在按下按钮的情况下,QFocusEvent 的原因是 Qt::MouseFocusReason,因此选择将被删除。

解决方法是在删除选择之前获取所选文本并再次设置:

class LineEdit(QLineEdit):
    def focusOutEvent(self, e):
        start = self.selectionStart()
        length = self.selectionLength()
        super().focusOutEvent(e)
        self.setSelection(start, length)
self.qle = LineEdit(self)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QLineEdit 使用按钮显示从鼠标选择中选择的文本 的相关文章

随机推荐

  • 如何在函数定义和函数调用中使用可变宏参数?

    我正在尝试使用宏根据宏的参数定义几个类似的函数 然而 结果函数需要采用的参数的数量和类型在所有函数中并不相同 但我还需要将函数的所有参数传递到函数体内的另一个可变参数函数中 我想要完成的事情的一个最小例子 define COMMAND CO
  • Checkstyle规则限制根包之间的交互(使用ImportControl?)

    如何创建 Checkstyle 规则来限制不同根包之间的交互 我有以下3个根包 models views controllers They are not就像是com mycompany myproject models 他们是根包 我想禁
  • 如何使用循环获取dir()中的值?

    为什么我无法使用循环获取 dir 中项目的值 for item in dir print item 它只是打印 builtins doc loader name package spec 那么 我如何使用循环来打印 item 中的值 即 m
  • Scala 中的 N 皇后

    def queens n Int List List Int Int def placeQueens k Int List List Int Int if k 0 List List else for queens lt placeQuee
  • 仅包含“div”的表格碎片

    当尝试抓取网页时 该表没有 tr 标签 并且是全部 div tags 我试图抓取的站点检查器如下所示 检查员截图 我希望能够从table row类 但刮擦永远不会返回任何东西 使用下面的代码 当我抓取 table header 要不就 pr
  • 列表与字典(最大大小、元素数量)

    我试图确定列表和字典的最大大小 以 RAM 为单位 我也很好奇每个元素 条目可以容纳的最大数量 以及每个条目的内存占用量 我的理由很简单 我和大多数程序员一样 有点懒 这是一种美德 当我编写程序时 我喜欢只编写一次 并尽可能使其面向未来 我
  • 将 8 字节数组转换为 Double

    谈论 Visual Basic 6 我能够找到如何将 Double 转换为 8 字节数组 但反之则不然 在我开始尝试编码之前 是否有一些例程可以执行此操作 例如链接问题中描述的 CopyMemory 在这种情况下可以使用 CopyMemor
  • 查找所有 k 大小的子集,其总和为 n 大小的重复未排序正整数袋

    请注意 这是必需的C NET 2 0项目 不允许使用 Linq 我知道这里已经提出了非常类似的问题 并且我已经生成了一些工作代码 见下文 但仍然希望获得有关如何在给定 k 和 s 条件下使算法更快的建议 这是我到目前为止所学到的 动态规划是
  • Puppeteer 未拾取对话框

    我正在尝试测试 Puppeteer 中的警报框 msg await page goto http localhost 8080 waitUntil networkidle2 await page eval value el gt el va
  • 将新数据插入表中

    我希望对以下问题有所帮助 请注意 此代码从我选择的日期生成一个系数 在本例中为 03 07 dmda 它给出的系数等于 15 55 在这种情况下 我想生成一个新表 其中有一列包含日期 另一列包含与这些日期对应的系数 对于列日期 只有以下日期
  • 使用 selenium python 从隐藏元素中获取文本

    我在 python 中使用 selenium 从网站上抓取信息 但是我遇到了一个问题 当我单击网站从表中获取更多行后 出现的行有一个hidden xs hidden sm我似乎无法找到获取这些元素的方法 我的代码如下 你有什么办法可以帮助我
  • PendingIntent.FLAG_IMMUTABLE 可以替换 PendingIntent.FLAG_UPDATE_CURRENT 吗?

    我正在处理PendingIntent with notification 在我的项目中 我一直在使用PendingIntent FLAG UPDATE CURRENT在一些代码中 它的定义如下 Flag表示如果所描述的PendingInte
  • 使用 BASH 更新通过引用传递的数组

    我想编写一个函数 它采用数组变量名并更新内容 例如 ARRAY1 test 1 test 2 test 3 toUpper ARRAY1 for arg in ARRAY1 do echo arg arg done output arg T
  • 为什么 setTimeout 中的回调即使在严格模式下也会有 this == Window ?

    我现在正在学习 JS 不明白为什么 use strict 指令不适用于 setTimeout 的回调 据我所知 对于 use strict 它应该是未定义的 但始终具有全局对象 function f use strict console l
  • Android、Logcat 和 BufferedReader - 无日志

    我正在制作一个应用程序 它必须在日志中显示我在设备上启动的应用程序 我用logcat ActivityManager I S它在某些设备和模拟器上做得很好 但在某些设备上它有奇怪的行为 我在日志中看到的所有内容都是重复的 02 18 16
  • 在 Eclipse 中克隆后立即取消暂存更改

    我正在使用 Atlassian Stash 和 Eclipse Kepler 的 Git 插件 并且我正在尝试克隆存储库 一旦我完成它 我立即就会得到 N 个未分阶段的更改 其中 N 每次我尝试时都会有所不同 当我尝试比较两个明显不同的文件
  • 使用 PHP 或 javascript 在

    我有一个很长的文本块 我想将这段文本的每 2500 个字符包装成一个 div 这样我就可以对其进行分页 以下不起作用 replace 2500 for 5 for purpose of this example text sfdkjas f
  • 413 请求实体太大 - 文件上传问题

    我正在尝试在我的服务器上上传 30MB 文件 但它不起作用 当我上传 30MB 文件时 页面会加载 找不到网页 当我上传 3MB 文件时 我收到 413请求实体太大 与 nginx 0 6 32 我正在尝试找到 nginx 这样我就可以增加
  • 运行时错误:Python 3.2 pickle.dump 超出了最大递归深度

    我使用下面的代码收到上述错误 错误发生在最后一行 请原谅这个话题 我只是在练习我的Python技能 from urllib request import urlopen from bs4 import BeautifulSoup from
  • QLineEdit 使用按钮显示从鼠标选择中选择的文本

    我想从 a 中获取选定的文本QLineEdit小部件 我们通过单击按钮来获取选定的文本 如果以编程方式选择文本 则它可以工作selectAll 但如果用鼠标选择文本则不起作用 在后一种情况下 显示空字符串 为什么文本有如此大的差异以及如何让