我有一个奇怪的问题,当文本被更改时,标签没有被正确重绘,当它在QHBoxLayout
内有一个额外的拉伸。
考虑以下(PyQt)示例代码:
from PyQt5.QtWidgets import QApplication, QHBoxLayout, QWidget, QLabel
from PyQt5.QtCore import QTimer
def clearlabel():
print("clearing")
lbl.setText("")
lbl2.setText("")
app = QApplication([])
# Widget 1: with stretch
w = QWidget()
w.move(0, 0)
w.resize(100, 20)
w.show()
lbl = QLabel()
lbl.setText("foo")
h = QHBoxLayout(w)
h.addStretch()
h.addWidget(lbl)
# Widget 2: without stretch
w2 = QWidget()
w2.move(0, 40)
w2.resize(100, 20)
w2.show()
lbl2 = QLabel()
lbl2.setText("foo")
h2 = QHBoxLayout(w2)
h2.addWidget(lbl2)
QTimer.singleShot(1000, clearlabel)
app.exec_()
显示两个小部件,一个带有QHBoxLayout
并添加了拉伸,一个没有:
2秒后,计时器将两个标签文本从“foo”设置为空字符串。在没有拉伸的小部件中,它的工作方式与预期的一样 - 但是,有一个标签文本不会重绘:
那里发生了什么?这是一个Qt错误吗?我错过了什么吗?
到目前为止我发现了什么:
我现在已将其提交为QTBUG-36945。
答案 0 :(得分:1)
感谢#qt
IRC频道(在Freenode上)中有帮助的人,我在设置文本后围绕这个问题做了一个重绘:
class Label(QLabel):
...
def setText(self, text):
super().setText(text)
if not text:
self.repaint()
我仍然很高兴知道我在某处错了,或者我是否应该提交Qt错误。