2013-02-19 2 views
0

guys.I имеет QLabel с pixmap - изображение PNG (как правило, футбольное поле), и я хочу нарисовать на игровой площадке некоторые прямоугольники (представляющие некоторые роботы), которые я использую для рисования на самом деле на его контейнере. QLabel. Но когда я использую живописца для рисования REC, RECT показывал, но изображение просто превратилось в пустую. Я не знаю, почему это не удалось, и может ли вы оказать мне услугу и дать мне некоторые намеки на это?Почему pixmap (изображение футбольного поля) исчезает, когда я пытаюсь что-то нарисовать на его QLabel?

class FieldLabel(QtGui.QLabel): 

    positionData = {"1":{"x":13,"y":20},"2":{"x":28,"y":19},"3":{"x":17,"y":21}} 
    def __init__(self, image_path): 
     QtGui.QLabel.__init__(self) 
     self.field = QtGui.QPixmap("field.png") 
     self.setPixmap(self.field.scaled(self.size(), 
             QtCore.Qt.KeepAspectRatio)) 
     self.setSizePolicy(QtGui.QSizePolicy.Expanding, 
          QtGui.QSizePolicy.Expanding) 
     self.setAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter) 


    def paintEvent(self,e): 
     draw = QtGui.QPainter() 
     draw.begin(self) 
     draw.setBrush(QtCore.Qt.NoBrush) 
     draw.setPen(QtCore.Qt.blue) 
     draw.drawRect(0,0,10,10) 
     draw.end() 

ответ

1

paintEvent несет ответственность за рисование всего в виджетах. Поскольку вы переопределяете его, реализация по умолчанию QLabel, которая рисует QPixmap, не вызывается.

Итак, сначала вы должны позволить QLabel делать свою картину, то вы можете рисовать над ним, как вам нравится:.

def paintEvent(self,e): 
    # call the base implementation to paint normal interface 
    super(FieldLabel, self).paintEvent(e) 

    # then paint over it 
    draw = QtGui.QPainter() 
    draw.begin(self) 
    draw.setBrush(QtCore.Qt.NoBrush) 
    draw.setPen(QtCore.Qt.blue) 
    draw.drawRect(0,0,10,10) 
    draw.end() 
+0

Спасибо и @ Аварис Это очень helpful.I не признает набор пиксельных также является paintEvent и будет иметь некоторый эффект переопределения. – Derek

+0

И я также работаю над некоторой системой координат на этом ярлыке и pixmap. Но я был удивлен, обнаружив, что, когда я получил и распечатал некоторые значения высоты и ширины (используя предопределенные методы, такие как '.height()' and'. width() ') из Label и Pixmap, значения Pixmap даже больше, чем Label's.So. Я думаю, что два класса используют математическую единицу измерения математически. Так как я могу получить один и тот же размер фона, чтобы я мог рассчитать некоторые координаты для моих картин? – Derek

+0

@Derek: У них нет одинаковой единицы (пикселей). Но вы помещаете pixmap масштабируемо в размер 'QLabel'. Если вы не делаете никакого масштабирования или вручную не устанавливаете размер метки, 'QLabel' будет настраиваться на размер pixmap. – Avaris