2014-02-19 4 views
2

텍스트가 바뀌면 올바르게 그려지 지 않는 레이블에 이상한 문제가 있습니다.이 경우 바코드는 QHBoxLayout 안에 추가됩니다. ,QHBoxLayout (늘이기)에서 QLabel이 올바르게 다시 그려지지 않습니다.

widgets before changing string

후 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"에서 빈 문자열로 설정합니다. 거기에 무슨

widgets after changing string

: - 그것은 예상처럼 작동 스트레칭없이 위젯에서와 하나 그러나, 레이블 텍스트는 다시 그려을하지 않습니다? Qt 버그입니까? 내가 놓친 게 있니? 짧은 문자열이 잘 작동 설정, 빈 문자열을 설정할 때

  • 이는 일이 보인다 : 지금까지 발견 무엇

    .

  • 그러나 실제 응용 프로그램에서는 스트레치도 추가하지 않고도 발생합니다.

나는 이것을 QTBUG-36945으로 제출했습니다.

class Label(QLabel): 

    ... 

    def setText(self, text): 
     super().setText(text) 
     if not text: 
      self.repaint() 

아직도 내가 알고 기꺼이 것 : 텍스트를 설정하면이 문제를 해결 작동 후 (Freenode의에서) #qt IRC 채널에 도움이 사람들에게

+0

Qt 버그 인 것 같습니다. 필자는 PyQt5 및 C++ 클라이언트 코드 모두에서 Qt 5.0.2 및 5.1.0 용으로 재현 할 수있었습니다. '.setText ("")'를'clear()'로 바꾸면 문제가 해결됩니다. 'setText' 전에 항상'clear()'를 호출하도록하십시오. 임시 수정으로 작동 할 수도 있습니다. 이 문제는 추가 조사가 필요합니다. 나는 나중에 그것을하려고 노력할 것이다. –

+0

나는 이것을 시도해 보았지만이 예제에서 문제를 해결했지만 내 [실제 코드] (http://git.the-compiler.org/qutebrowser/tree/qutebrowser/widgets)에 도움이되지 않았습니다. /statusbar.py). 그러나 텍스트를 설정 한 후에'repaint()'를 사용하면 도움이됩니다. –

+0

@PavelStrakhov 마음이 C++ 코드를 공유하여보고 한 버그에 첨부 할 수 있습니까? –

답변

0

덕분에, 나는 다시 그리기를하고 알아 냈어 Qt 버그를 제출해야한다면 어딘가 잘못되었습니다.

관련 문제