Я написал класс для отображения прямоугольников (класса ячеек). Я хотел бы иметь функции внутри класса для вызова другого класса (т. Е. Вызывая cell.paintEvent(self,event)
и cell.drawRectangles(self,qp)
в функции, определенной в классе Window). К сожалению, я не знаю, как назвать эти функции в другом классе (например, Window), поскольку они оба требуют аргументы (то есть event
и pq
), и я не знаю, что им передать.Вызов paintEvent() из класса в pyqt4 python
Вот код для моего класса клеток:
class cell(object):
def __init__(self, c, x, y, w, h, active,flux_val,index):
self.c1 = c
self.c2 = c
self.c3 = 255
self.x = x
self.y = y
self.w = w
self.h = h
self.index = index
self.active = active
self.flux_val = flux_val
self.isChecked = False
self.isHit = False
def paintEvent(self, e):
qp = QtGui.QPainter()
qp.begin(self)
self.drawRectangles(qp)
qp.end()
def drawRectangles(self, qp):
color = self.c2
#qp.setPen(color)
qp.setBrush(color)
qp.drawRect(self.x, self.y, self.w, self.h)
Вот часть кода (в частности def.initiate(self)
), где я хочу, чтобы создать экземпляр массива объектов клеток (которые я легко могу сделать), а затем называть свои соответствующие функции отображения (т.е. cell.paintEvent(self,event)
и cell.drawRectangles(self,qp)
, которые я до сих пор не понял, как это сделать):
import sys
from PyQt4 import QtGui, QtCore
import numpy as np
class Window(QtGui.QMainWindow):
def __init__(self):
super(Window, self).__init__()
self.setGeometry(50, 50, 1000, 800)
self.setWindowTitle("PyQT tuts!")
self.initiate()
self.show()
def initiate(self):
#initiate an array of cell objects
#Call their display functions (or any other relevant class functions)
На самом деле весь код в одном файле. Я уже определил объект ячейки (т. Е. Test = cell (a, b, c, ....)), а затем попробовал test.paintEvent() в initiate(). Но мне подсказывают, что paintEvent() нуждается в аргументе, и он не работает. Я не знаю, что делать, когда я должен передать ему аргумент «событие». Я определил функцию - это класс ячейки, называемый def pr (self), который будет печатать только строку. Я мог бы легко вызвать эту функцию (т. Е. Test.pr(), напечатать строку). Возможно, если paintEvent был пустым, я мог бы просто сказать test.paintEvent(), и он нарисовал бы форму для меня. –
@Jamycodes хорошо, если у вас есть функция под названием 'pr', а затем передайте аргумент события' pr' как 'cell.paintEvent (cell.pr)'. Но из вашего кода, вышедшего выше, я не вижу, где используется 'e' в' paintEvent (self, e) '. –
Это хороший момент. Я тоже не вижу этого. Я беру на себя инициативу из этого примера, который использует те же функции, но не имеет в классе объектов, как я. Я не вижу, где вводится «e» в качестве аргумента в функции: Вот ссылка: [http://zetcode.com/gui/pyqt4/drawing/] –