PyQt:当内容更改时如何处理小部件的自动调整大小

2024-02-08

当 qt4 小部件的内容发生变化时,我遇到了一些大小问题。

我将用两个简单的场景来说明我的问题:

场景一:

我有一个 QLineEdit 小部件。有时,当我使用 QLineEdit.setText() 更改其内容时,单行字符串不再适合其当前大小的小部件。我必须选择该小部件并使用箭头键双向滚动字符串才能查看全部内容。

场景2:

我有一个 QTextEdit 小部件。有时,当我使用 QTextEdit.setHtml() 更改其内容时,渲染的 HTML 内容不再适合当前大小的小部件。小部件开始显示水平和/或垂直滚动​​条,我可以使用它们来滚动 HTML 内容。

在这种情况下,我想要的是有一些逻辑来决定内容更改后,新内容是否不再适合小部件,并自动增加小部件大小,以便一切都适合。

这些场景如何处理? 我正在使用 PyQt4。

编辑:在阅读评论和第一个答案(其中提到在小部件中输入内容)后,我再次讨论了这个问题。我很不愉快地惊讶地发现了一个可怕的错字。当我写 QTextEdit 时,我指的是 QTextBrowser,很抱歉误导了您。也就是说:我有一个小部件,它呈现我正在更改的 HTML 代码,并且我希望该小部件能够增长到足以显示所有内容而无需滚动条。

至于 QLineEdit 而不是 QLabel - 我选择了 QLineEdit,因为我注意到我无法用鼠标从 QLabel 选择文本来复制它。使用 QLineEdit 这是可能的。


我在这里用 C++ 回答,因为这是我最熟悉的,而且你的问题并不特定于 PyQt。

通常情况下,您只需要调用QWidget::updateGeometry()当。。。的时候sizeHint()可能已经改变了,就像你需要打电话一样QWidget::update()当内容可能发生变化时。

然而,你的问题是sizeHint()添加文本时不会改变QLineEdit and QTextEdit。原因是:人们并不期望他们的对话会随着他们输入的内容而增长:)

也就是说,如果您确实希望在这些小部件中实现随类型增长的行为,您需要继承它们并重新实现sizeHint() and minimumSizeHint()返回较大的尺寸,并且可能setText(), append()等来电updateGeometry()所以注意到尺寸提示的变化。

sizehint 的计算并不完全是微不足道的,并且对于QLineEditQTextEdit(这是秘密的QAbstractScrollArea),但你可以看看sizeHint() and minimumSizeHint()灵感的实现(也是QComboBox,它有一个模式可以完全满足您的需求:QComboBox::AdjustToContents.

编辑:您的两个用例(QTextBrowser没有滚动条和QLineEdit而不是QLabel仅用于选择其中的文本)可以通过使用QLabel和足够新的Qt来解决。 QLabel 在 Qt 4.2 中获得了链接点击通知和所谓的“文本交互标志”(其中之一是 TextSelectableByMouse)。我能够看出的唯一区别是,加载新内​​容不是自动的,没有历史记录,并且 QLabel 中没有微焦点提示(即从一个链接切换到另一个链接)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PyQt:当内容更改时如何处理小部件的自动调整大小 的相关文章

  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • 如何从两个不同的项目中获取文件夹的相对路径

    我有两个项目和一个共享库 用于从此文件夹加载图像 C MainProject Project1 Images 项目1的文件夹 C MainProject Project1 Files Bin x86 Debug 其中有project1 ex
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 如何将带有 IP 地址的连接字符串放入 web.config 文件中?

    我们当前在 web config 文件中使用以下连接字符串 add name DBConnectionString connectionString Data Source ourServer Initial Catalog ourDB P
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • Rocket UniData/UniVerse:ODBC 无法分配足够的内存

    每当我尝试使用pyodbc连接到 Rocket UniData UniVerse 数据时我不断遇到错误 pyodbc Error 00000 00000 Rocket U2 U2ODBC 0302810 Unable to allocate
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class
  • NotImplementedError:无法将符号张量 (lstm_2/strided_slice:0) 转换为 numpy 数组。时间

    张量流版本 2 3 1 numpy 版本 1 20 在代码下面 define model model Sequential model add LSTM 50 activation relu input shape n steps n fe

随机推荐