更改标签的文本在透明小部件上无法正常工作

Posted

技术标签:

【中文标题】更改标签的文本在透明小部件上无法正常工作【英文标题】:Changing a label's text is not working properly on transparent widgets 【发布时间】:2022-01-21 16:22:27 【问题描述】:

这似乎是一个错误,但我想在报告之前确认一下。

我正在尝试更新透明小部件上的标签文本,但由于某种原因,之前的文本部分可见(请参见下面的屏幕截图)

以前有人遇到过这个问题吗?是否有任何已知的解决方法?

系统规格:MacOS Monterey 12.0.1 和 Python 3.10

screenshot

from PyQt6 import QtWidgets, QtCore
from PyQt6.QtCore import QTimer
from PyQt6.QtGui import QFont
from PyQt6.QtWidgets import QLabel


def update_label():
    l1.setText("Bye!")
    window.repaint()


app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QWidget()
window.setAttribute(QtCore.Qt.WidgetAttribute.WA_TranslucentBackground)
window.setWindowFlag(QtCore.Qt.WindowType.FramelessWindowHint)
window.setFixedSize(800, 600)
font = QFont()
font.setPointSize(72)
l1 = QLabel(window)
l1.setText("Hello World")
l1.setFont(font)
l1.setStyleSheet("color:red")
window.show()
timer = QTimer()
timer.setInterval(10000)
timer.timeout.connect(update_label)
timer.start()
app.exec()

【问题讨论】:

Qt(与其他工具包一样)在新的 macOS 版本弹出时存在很长的问题历史。这不是 Qt 的错,因为他们的开发人员非常努力地保持与许多不同平台和版本的兼容性,而 Apple 并不容易,因为他们以改变重要的核心方面而闻名,有时会破坏很多向后兼容性(他们的政策或多或少是“我们改变它,世界其他地方必须适应和升级,我们不在乎”)。另外,虽然 Qt6 现在已经一岁了,但它仍在努力开发中,虽然 6.2LTS 已在 9 月发布,但它们 -> -> 显然无法跟上发布时间不同的操作系统版本。也就是说,首先,请确保您拥有最新的 PyQt6 版本(几周前发布了 6.2.2),如果可以,请检查您的代码是否与 PyQt5 一起正常工作。如果问题仍然存在,那么您应该在他们的系统中提交一个错误:bugreports.qt.io,提供示例代码和所有相关信息。我还建议您尝试为父级设置一个正确的layout manager(您总是应该这样做)并为其添加标签。 【参考方案1】:

不确定是否可以将其视为答案,但我找到了解决方法。

只需关闭然后再次显示窗口:


def update_label():
    window.close()
    window.show()
    l1.setText('Bye!')

【讨论】:

以上是关于更改标签的文本在透明小部件上无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

如何更改标签小部件中的文本大小,python tkinter [重复]

更改 Kivy 小部件部分文本的颜色

Extjs 小部件标签字段无法在远程存储列表中设置选定值

无法更改停靠小部件填充

Flutter:Dismissible 小部件内的 SnackBar 无法正常工作

Flutter:在滚动时更改小部件不透明度和颜色的最佳方法