텍스트가 바뀌면 올바르게 그려지 지 않는 레이블에 이상한 문제가 있습니다.이 경우 바코드는 QHBoxLayout
안에 추가됩니다. ,QHBoxLayout (늘이기)에서 QLabel이 올바르게 다시 그려지지 않습니다.
후 2 초 :
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
하나, 하나
는 다음 (PyQt는) 코드 예를 고려 타이머는 두 레이블 텍스트를 "foo"에서 빈 문자열로 설정합니다. 거기에 무슨
: - 그것은 예상처럼 작동 스트레칭없이 위젯에서와 하나 그러나, 레이블 텍스트는 다시 그려을하지 않습니다? Qt 버그입니까? 내가 놓친 게 있니? 짧은 문자열이 잘 작동 설정, 빈 문자열을 설정할 때
이- 이는 일이 보인다 : 지금까지 발견 무엇
.
- 그러나 실제 응용 프로그램에서는 스트레치도 추가하지 않고도 발생합니다.
나는 이것을 QTBUG-36945으로 제출했습니다.
class Label(QLabel):
...
def setText(self, text):
super().setText(text)
if not text:
self.repaint()
아직도 내가 알고 기꺼이 것 : 텍스트를 설정하면이 문제를 해결 작동 후 (Freenode의에서) #qt
IRC 채널에 도움이 사람들에게
Qt 버그 인 것 같습니다. 필자는 PyQt5 및 C++ 클라이언트 코드 모두에서 Qt 5.0.2 및 5.1.0 용으로 재현 할 수있었습니다. '.setText ("")'를'clear()'로 바꾸면 문제가 해결됩니다. 'setText' 전에 항상'clear()'를 호출하도록하십시오. 임시 수정으로 작동 할 수도 있습니다. 이 문제는 추가 조사가 필요합니다. 나는 나중에 그것을하려고 노력할 것이다. –
나는 이것을 시도해 보았지만이 예제에서 문제를 해결했지만 내 [실제 코드] (http://git.the-compiler.org/qutebrowser/tree/qutebrowser/widgets)에 도움이되지 않았습니다. /statusbar.py). 그러나 텍스트를 설정 한 후에'repaint()'를 사용하면 도움이됩니다. –
@PavelStrakhov 마음이 C++ 코드를 공유하여보고 한 버그에 첨부 할 수 있습니까? –