Виджеты, созданные с родителем вне их __init__
(или родительских элементов), но не , добавленные в макет, должны быть явно показаны; вам не хватает этого:
self.label.show()
Кроме того, вы НЕ ДОЛЖНЫ создавать новые виджеты внутри paintEvent.
Рисование - это то, что часто случается, обычно в следующие ситуации (которые случаются очень часто :
- , когда виджет отображается впервые
- всякий раз, когда виджет скрыт и отображается снова (например, после сворачивание и восстановление окна)
- всякий раз, когда мышь входит или выходит из него и / или его дочерних элементов
- при изменении размера виджета или любого из его родителей
- при отображается новый дочерний элемент
В результате, если вы добавите виджет для каждого события рисования, вы, вероятно, получите десятки (если не сотни или тысячи) виджетов, и , что наиболее важно, если вы также покажете это, это вызовет бесконечную рекурсию.
class Window(QMainWindow):
def __init__(self):
super(Window,self).__init__()
title="layout management"
left=500
top=200
width=500
height=400
iconName="fosseeicon.jpg"
self.setWindowTitle(title)
self.setWindowIcon(QtGui.QIcon(iconName))
self.setGeometry(left, top, width, height)
self.should_paint_circle = False
self.windowcomponents()
self.label = QtWidgets.QLabel(self)
self.label.hide()
# ...
def paintEvent(self, event):
super().paintEvent(event)
if self.should_paint_circle:
painter = QtGui.QPainter(self)
painter.setRenderHint(QPainter.Antialiasing)
painter.setPen(QPen(Qt.black, 5, Qt.SolidLine))
painter.drawEllipse(100, 100, 100, 100)
def paintcircle(self, painter):
self.should_paint_circle = True
self.label.setText('<h2>circle<h2>')
self.label.move(60,100)
self.label.show()
self.update()
Тем не менее, на основании этого и предыдущего вопроса я предлагаю вам изучить документацию более тщательно, особенно то, что отн Относится к QMainWindow , Управлению раскладкой , в Qt и соответствующей документации QPainter .