问题标签 [qtoolbutton]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
55 浏览

python - 如何忽略 QToolButton 菜单中的第一个鼠标事件以防止不必要的项目选择

一位同事制作了一个定制的 QMenu 衍生产品,以便在菜单关闭之前可以选择多个条目。

它是通过 QToolButton 触发的。

问题是如果菜单足够大,它将与按钮重叠。单击 QToolButton 时,当前光标位置的项目会立即被选中。

如何防止这种情况发生?

我的菜单代码,我试图忽略第一个带有 Bool 标志的事件,但它不起作用。

图片:点击按钮之前

图片:点击 QToolButton 后

0 投票
1 回答
717 浏览

python - PyQt QToolButton在焦点时不更新图标

我在更新设置为 的按钮图标时遇到问题QToolButton。这个想法是将按钮用于电影播放器​​。播放时,按下按钮,图标变为暂停。再次按下时,播放暂停,图标恢复播放。我有一些工作代码,但问题是图标没有持续更新。如果我将 Qt 窗口保持在焦点上,则需要按下一两个按钮才能将图标更改为预期图像,此时实际图像不是预期图像(交换播放/暂停)。

这是一些最小的示例代码:

在上面,我从一个停止图标开始,只是为了确保观察到变化(任何点击都应该总是改变图标)。保持窗口聚焦,我得到以下输出:

  • 第一次单击:“按钮应设置为暂停。按下为真”(图标没有变化)
  • 第二次单击:“按钮应设置为播放。按下为假”(图标变为暂停)
  • 第三次单击:“按钮应设置为暂停。按下为真”(图标更改为播放)(依此类推,继续按预期交换)

我还注意到,如果每次单击后,我在 Qt 窗口之外单击,或者调整 Qt 窗口的大小,按钮图标会更新为正确的图标。我究竟做错了什么?如何强制图标更新?

这种行为主要发生在QToolButton,但QPushButton也会产生问题(在专注时工作,但如果我调整 Qt 窗口的大小,则会出现行为不端/丢失正确状态的跟踪)。在 macOS 上使用 PyQt 5.12.3 和 qt 5.12.5。

0 投票
1 回答
120 浏览

python - 带有弹出 QSlider 的 QToolButton

我正在尝试制作音量按钮,单击时应静音/取消静音,悬停时应弹出QSlider,因此用户可以设置他想要的任何级别。现在我试图通过在其中显示滑块窗口enterEvent并将其隐藏来实现这一点leaveEvent

问题是它mapToGlobal似乎以某种方式连接enterEvent并且它创建了递归,但是没有mapToGlobal我不能将滑块放在正确的位置。我不确定这是否是实现预期QToolButton结果FramelessWindow的正确小部件,因此请告诉我是否有更好的方法来做到这一点。

0 投票
1 回答
23 浏览

python - 在 QToolButton 上显示两种颜色的字体

我想要一个显示两种颜色文本的按钮。我尝试了以下方法:

但我得到:

我不明白为什么。

0 投票
1 回答
118 浏览

python - 窗口小时按钮不可点击

我正在创建一个可扩展/可折叠的小部件,因为 Qt 直到现在才提供这样的功能。我的问题是,展开/折叠小部件的按钮似乎只能点击,如果你让窗口非常大(只有窗口的宽度是相关的)。主小部件的元素按预期工作。有谁知道它的原因?

GIF 演示效果

0 投票
1 回答
47 浏览

qt - 如何在 QToolButton 中为指标设置右边距?

我有带有左图标和右指示器的 QToolButton(MenuButtonPopup 模式)。如何通过 qss 更改此距离?注意图片

工具按钮:
工具按钮

0 投票
1 回答
39 浏览

python - python pyqt5 替换 QToolButton 中的 QMenu

文件:ui.py

文件:main.py

要重现问题,请运行python main.py,然后单击菜单操作(从向下箭头)。

此错误消息出现在屏幕中: