def paintEvent(self, pe): painter = QPainter(self) painter.save() gradient = QLinearGradient() gradient.setStart(self._grad_start) gradient.setFinalStop(self._grad_end) gradient.setColorAt(0, QColor(230, 230, 230)) gradient.setColorAt(1, QColor(247, 247, 247)) brush = QBrush(gradient) painter.setBrush(brush) pen = QPen(Qt.black) pen.setWidth(1) painter.setPen(pen) painter.drawPath(self._painter_path) painter.restore() font = QFont() font.setFamily("Tahoma") font.setPixelSize(11) font.setBold(True) pen = QPen(Qt.darkGray) painter.setPen(pen) painter.setFont(font) self_rect = QRect(self.rect()) self_rect.moveTo(self._hor_margin, self._ver_margin // 2) painter.drawText(self_rect, Qt.AlignLeft, self._text)
def paintEvent(self, event): painter = QPainter() painter.begin(self) painter.save() self.rect = painter.viewport() self.rect.adjust(0, 0, -1, -1) painter.drawRect(QRectF(self.rect)) self.prj.setupPrism(self.rect.height(), 68) self.prj.setupProjectionMatrix(self.alef, self.bet) # draw the prism self.drawCubick(painter, [0, 0, 0], 63, 16) mineCube = self.parent.presenter.mineCube for y in range(len(mineCube)): for z in range(len(mineCube[0])): for x in range(len(mineCube[0][0])): if mineCube[y][z][x] in self.parent.selectedMinerals.list_: colo = self.parent.selectedMinerals.\ getColor(mineCube[y][z][x]) self.drawCubick(painter, [x, y, z], color=colo) self.drawSliceCursor(painter, self.parent.presenter.elevation) painter.restore() painter.end() del painter
def paintEvent(self, pe): # make an arrow polygon right in the middle painter = QPainter(self) painter.setPen(Qt.NoPen) # draw the background transparent rect painter.save() painter.setOpacity(self.BACKGROUND_OPACITY) # get the rectangle coordinates it should extend over the whole width with only a portion at the center painter.setBrush(Qt.black) empty_space_percent = 1 - self.BACKROUND_HEIGHT_PERCENT rect_top = empty_space_percent / 2 * self.height() rect_height = self.BACKROUND_HEIGHT_PERCENT * self.height() painter.drawRect(0, rect_top, self.width(), rect_height) painter.restore() painter.setRenderHint(QPainter.Antialiasing) pen = QPen() pen.setWidth(self.ARROW_LINE_WIDTH) pen.setCapStyle(Qt.RoundCap) if self._mouse_inside: pen.setColor(self._hover_color) else: pen.setColor(self._normal_color) # get the arrow coords painter.setPen(pen) self_center = QPointF(self.width() / 2, self.height() / 2) # use this as the arrow tip for now if self._direction == self.LEFT: h_shift = self._arrow_width elif self._direction == self.RIGHT: h_shift = - self._arrow_width v_shift = self._arrow_height / 2 top_point = self_center + QPointF(h_shift, - v_shift) bottom_point = self_center + QPointF(h_shift, v_shift) painter.drawLine(top_point, self_center) painter.drawLine(self_center, bottom_point)
def paintEvent(self, pe): if not self._hover_rect: super(TrackerWebView, self).paintEvent(pe) else: super(TrackerWebView, self).paintEvent(pe) hover_rect = self._hover_rect self._fixRectForScroll(hover_rect) painter = QPainter(self) painter.save() pen = QPen(Qt.red) pen.setWidth(2) painter.setPen(pen) painter.drawRect(hover_rect) painter.restore() # draw green rects around the similar elements pen = QPen() pen.setWidth(2) for field_info in self._fields_info: painter.save() web_elements = field_info.web_elements color = field_info.color pen.setColor(color) painter.setPen(pen) for elem in web_elements: elem_rect = elem.absoluteGeometry() painter.drawRoundedRect(self._fixRectForScroll(elem_rect), 2, 2) painter.restore()
def paintEvent(self, event): cX = self.parent.leftMargin + self.scaleMarkLen cY = self.parent.topMargin + self.scaleMarkLen worldX = self.parent.chunkX*16 worldZ = self.parent.chunkZ*16 painter = QPainter() path = QPainterPath() painter.begin(self) painter.save() #painter.setFont(QFont('Arial Narrow', 8)) #QFont.Bold # draw scale x = cX y = cY painter.rotate(-90) for i in range(16): fr = QRectF(-y, x, self.scaleMarkLen, self.edgeLen) painter.drawText(fr, Qt.AlignHCenter | Qt.AlignVCenter, '-5555') painter.drawRect(fr) #fr = QRectF(-y - 16*self.edgeLen - self.scaleMarkLen, x, self.scaleMarkLen, self.edgeLen) #painter.drawText(fr, Qt.AlignHCenter | Qt.AlignVCenter, '-5555') #painter.drawRect(fr) x += self.edgeLen painter.rotate(90) x = self.parent.leftMargin y = cY for i in range(16): fr = QRectF(x, y, self.scaleMarkLen, self.edgeLen) painter.drawText(fr, Qt.AlignHCenter | Qt.AlignVCenter, '-5555') painter.drawRect(fr) #fr = QRectF(x + self.scaleMarkLen + 16*self.edgeLen, y, self.scaleMarkLen, self.edgeLen) #painter.drawText(fr, Qt.AlignHCenter | Qt.AlignVCenter, '-5555') #painter.drawRect(fr) y += self.edgeLen x = cX y = cY for i in range(16): for j in range(16): path.addRect(x, y, self.edgeLen, self.edgeLen) fr = QRectF(x, y, self.edgeLen, self.edgeLen) #painter.drawText(fr, Qt.AlignHCenter | Qt.AlignVCenter, '-5555') x += self.edgeLen x = cX y += self.edgeLen painter.drawPath(path) painter.restore() painter.end() del painter
def paintEvent(self, pe): painter = QPainter(self) painter.save() background = QColor(55, 55, 55) brush = QBrush(background) painter.setOpacity(self._opacity) painter.setBrush(brush) painter.setPen(Qt.NoPen) painter.drawRect(self.rect()) painter.restore() # draw a bottom border painter.setPen(Qt.black) painter.drawLine(0, self.height(), self.width(), self.height()) # now the text pen = QPen(Qt.white) pen.setWidth(16) painter.setPen(pen) painter.setFont(QFont("Trebuchet MS", 16, QFont.Bold)) text_rect = QRect(self.rect()) text_rect.adjust(self._margin, self._margin, self._margin, self._margin) painter.drawText(text_rect, Qt.AlignLeft, self._message_str)
def paintEvent(self, event): """Display a translucent rounded rectangle.""" roundness = 10 rect = self.rect() bgcolor = self.palette().color(QPalette.Background) alpha_bgcolor = QColor(50, 50, 50, 150) # alpha_bgcolor = QColor(bgcolor.red(), bgcolor.green(), # bgcolor.blue(), 150) painter = QPainter() painter.begin(self) painter.save() painter.setRenderHint(QPainter.Antialiasing) painter.setPen(Qt.red) rounded_rect = QPainterPath() rounded_rect.addRoundRect(1, 1, rect.width() - 2, rect.height() - 2, roundness, roundness) painter.setClipPath(rounded_rect) self.setMask(painter.clipRegion()) painter.setOpacity(1.0) painter.fillPath(rounded_rect, QBrush(alpha_bgcolor)) painter.restore() painter.end()
def paintEvent(self, event): """Display a translucent rounded rectangle.""" roundness = 10 rect = self.rect() bgcolor = self.palette().color(QPalette.Background) alpha_bgcolor = QColor(50, 50, 50, 150) #alpha_bgcolor = QColor(bgcolor.red(), bgcolor.green(), # bgcolor.blue(), 150) painter = QPainter() painter.begin(self) painter.save() painter.setRenderHint(QPainter.Antialiasing) painter.setPen(Qt.red) rounded_rect = QPainterPath() rounded_rect.addRoundRect(1, 1, rect.width() - 2, rect.height() - 2, roundness, roundness) painter.setClipPath(rounded_rect) self.setMask(painter.clipRegion()) painter.setOpacity(1.0) painter.fillPath(rounded_rect, QBrush(alpha_bgcolor)) painter.restore() painter.end()
def paintEvent(self, event): super().paintEvent(event) painter = QPainter(self) # Рисование цифр в ячейки таблицы for i in range(self.matrix_size): for j in range(self.matrix_size): # Если текущая ячейка относится к дефолтной судоку if self.def_num_matrix[i][j]: painter.save() # painter.setPen() painter.setBrush(Qt.yellow) x = i * self.cell_size y = j * self.cell_size w, h = self.cell_size, self.cell_size painter.drawRect(x, y, w, h) painter.restore() # TODO: Закомментировано # Если индекс ячейки под курсором валидный if 0 <= self.x_highlight_cell < self.matrix_size and 0 <= self.y_highlight_cell < self.matrix_size: # # Выделение всего столбца и строки пересекающих ячейку под курсором # painter.save() # painter.setBrush(Qt.lightGray) # # # Выделение строки # for i in range(self.matrix_size): # painter.drawRect(i * self.cell_size, # self.y_highlight_cell * self.cell_size, # self.cell_size, # self.cell_size) # # # Выделение столбца # for j in range(self.matrix_size): # painter.drawRect(self.x_highlight_cell * self.cell_size, # j * self.cell_size, # self.cell_size, # self.cell_size) # # painter.restore() x, y = self.x_highlight_cell, self.y_highlight_cell # Не подсвечиваем дефолтную ячейку if not self.def_num_matrix[x][y]: # Выделение ячейки под курсором painter.save() painter.setBrush(Qt.darkYellow) painter.drawRect(x * self.cell_size, y * self.cell_size, self.cell_size, self.cell_size) painter.restore() # Рисование цифр в ячейки таблицы for i in range(self.matrix_size): for j in range(self.matrix_size): num = self.matrix[i][j] if not num: continue num = str(num) # Алгоритм изменения размера текста взят из http://stackoverflow.com/a/2204501 # Для текущего пришлось немного адаптировать factor = (self.cell_size / 2) / painter.fontMetrics().width(num) if factor < 1 or factor > 1.25: f = painter.font() point_size = f.pointSizeF() * factor if point_size > 0: f.setPointSizeF(point_size) painter.setFont(f) x = i * self.cell_size y = j * self.cell_size w, h = self.cell_size, self.cell_size painter.drawText(x, y, w, h, Qt.AlignCenter, num) # Рисование сетки таблицы y1, y2 = 0, 0 factor = min(self.width(), self.height()) / self.default_size size = self.default_pen_size_1 size2 = self.default_pen_size_2 if factor < 1 or factor > 1.25: size *= factor if size < self.min_default_pen_size_2: size = self.min_default_pen_size_2 painter.save() for i in range(self.matrix_size + 1): painter.setPen(QPen(Qt.black, size2 if i % 3 == 0 and i and i < self.matrix_size else size)) painter.drawLine(0, y1, self.cell_size * self.matrix_size, y2) y1 += self.cell_size y2 += self.cell_size x1, x2 = 0, 0 for i in range(self.matrix_size + 1): painter.setPen(QPen(Qt.black, size2 if i % 3 == 0 and i and i < self.matrix_size else size)) painter.drawLine(x1, 0, x2, self.cell_size * self.matrix_size) x1 += self.cell_size x2 += self.cell_size painter.restore()
def paintEvent(self, event): cX = self.parent.lytLeftMargin + self.scaleMarkLen cY = self.parent.lytTopMargin + self.scaleMarkLen worldX = self.parent.presenter.showChunkX*16 worldZ = self.parent.presenter.showChunkZ*16 painter = QPainter() path = QPainterPath() painter.begin(self) painter.save() #painter.setFont(QFont('Arial Narrow', 8)) #QFont.Bold # draw scale x = cX y = cY painter.rotate(-90) for i in range(16): fr = QRectF(-y, x, self.scaleMarkLen, self.edgeLen) painter.drawText(fr, Qt.AlignHCenter | Qt.AlignVCenter, str(worldX)) #painter.drawRect(fr) #fr = QRectF(-y - 16*self.edgeLen - self.scaleMarkLen, x, self.scaleMarkLen, self.edgeLen) #painter.drawText(fr, Qt.AlignHCenter | Qt.AlignVCenter, '-5555') #painter.drawRect(fr) x += self.edgeLen worldX += 1 painter.rotate(90) x = self.parent.lytLeftMargin y = cY for i in range(16): fr = QRectF(x, y, self.scaleMarkLen, self.edgeLen) painter.drawText(fr, Qt.AlignHCenter | Qt.AlignVCenter, str(worldZ)) #painter.drawRect(fr) #fr = QRectF(x + self.scaleMarkLen + 16*self.edgeLen, y, self.scaleMarkLen, self.edgeLen) #painter.drawText(fr, Qt.AlignHCenter | Qt.AlignVCenter, '-5555') #painter.drawRect(fr) y += self.edgeLen worldZ += 1 x = cX y = cY for i in range(16): for j in range(16): path.addRect(x, y, self.edgeLen, self.edgeLen) #fr = QRectF(x, y, self.edgeLen, self.edgeLen) #painter.drawText(fr, Qt.AlignHCenter | Qt.AlignVCenter, '-5555') x += self.edgeLen x = cX y += self.edgeLen painter.drawPath(path) slice_ = self.parent.presenter.getSlice(self.parent.presenter.elevation) x = cX y = cY bru = QBrush() #path1 = QPainterPath() for i in range(16): for j in range(16): if slice_[i][j] in self.parent.selectedMinerals.list_: lePen = painter.pen() newPen = QPen(bru, 3) newPen.setColor(self.parent.selectedMinerals.getColor(slice_[i][j])) painter.setPen(newPen) painter.drawRect(x, y, self.edgeLen, self.edgeLen) painter.setPen(lePen) x += self.edgeLen x = cX y += self.edgeLen painter.restore() painter.end() del painter
class Printer(object): def __init__(self): self.pages = [] self.handler = QPrinter() def reset(self): self.pages = [] def make_page(self, html): page = QTextDocument() page.setHtml(html) self.pages.append(page) def generate_employee_table(self, employees): html = """ <table align="center" cellpadding="10"> <tr> <th>ID</th> <th>Name</th> <th>Address</th> <th>Phone Number</th> <th>Cell Number</th> <th>Email Address</th> </tr> """ for employee in employees: html += """ <tr> <td>%(id)s</td> <td>%(first_name)s %(last_name)s</td> <td>%(street_address)s<br /> %(city)s %(state)s %(zip_code)s</td> <td>%(phone_number)s</td> <td>%(cell_number)s</td> <td>%(email_address)s</td> </tr> """ % employee html += "</table>" return html def generate_employer_table(self, employer): html = """ <table align="center" width="500"> <tr> <th>ID</th> <td>%(id)s</td> </tr> <tr> <th></th> <td></td> </tr> <tr> <th>Company</th> <td>%(name)s</td> </tr> <tr> <th>Address</th> <td> %(street_address)s<br /> %(city)s %(state)s %(zip_code)s </td> </tr> <tr> <th></th> <td></td> </tr> <tr> <th>Contact Person</th> <td>%(contact_person)s</td> </tr> <tr> <th></th> <td></td> </tr> <tr> <th>Phone Number</th> <td>%(phone_number)s</td> </tr> <tr> <th></th> <td></td> </tr> <tr> <th>Email Address</th> <td>%(email_address)s</td> </tr> </table><br> """ % employer return html def generate_sorted_employee_table(self, employees): html = """ <table align="center" cellspacing="10"> <tr> <th>Overall Score</th> <th>ID</th> <th>Employee</th> <th>Site</th> <th>Overall Comments</th> </tr> """ for employer, employee, score, comments in employees: html += """ <tr> <td>%s</td> <td>%s</td> <td> %s %s<br /> %s<br /> %s %s %s </td> <td>%s<br />(ID# %s)</td> <td>%s</td> </tr> """ % (score, employee["id"], employee["first_name"], employee["last_name"], employee["street_address"], employee["city"], employee["state"], employee["zip_code"], employer["name"], employer["id"], comments) html += "</table>" return html def emit_employer(self, employer, employees): html = """ <img style="float: left;" src=":/img/mmt.png" width="200" height="65"> <h1 align="right">Employer Information</h1> <hr /> <p> <b>CLIENT WORKSITE:</b><br /> %(name)s (ID# %(id)s)<br /> %(street_address)s<br /> %(city)s, %(state)s %(zip_code)s </p> <p> <b>CLIENT CONTACT:</b><br /> %(contact_person)s<br /> %(phone_number)s<br /> %(email_address)s </p> """ % employer if employees: html += '<h2 align="center">Employees</h2><hr />' html += self.generate_employee_table(employees) self.make_page(html) def emit_employee(self, employer, employee): html = """ <img style="float: left;" src=":/img/mmt.png" width="200" height="65" cellspacing=0 cellpadding=1> <h1 align="right">Employee Information</h1> <hr /> """ html += """ <table align="center" cellpadding="1" width="500"> <h2 align="left">Employee</h2> <tr> <th></th> <td></td> </tr> <tr> <th>ID</th> <td>%(id)s</td> </tr> <tr> <th></th> <td></td> </tr> <tr> <th>Name</th> <td>%(first_name)s %(last_name)s</td> </tr> <tr> <th></th> <td></td> </tr> <tr> <th>Address</th> <td> %(street_address)s<br /> %(city)s %(state)s %(zip_code)s </td> <tr/> <tr> <th></th> <td></td> </tr> <tr> <th>Email Address</th> <td>%(email_address)s</td> </tr> <tr> <th></th> <td></td> </tr> <tr> <th>Phone Number</th> <td>%(phone_number)s</td> </tr> <tr> <th></th> <td></td> </tr> <tr> <th>Cell Number</th> <td>%(cell_number)s</td> </tr> </table><br /> """ % employee html += '<h2 align="left">Employer</h2><br />' html += self.generate_employer_table(employer) self.make_page(html) def emit_evaluation(self, employer, employee, evaluation): eval_time = QDateTime() eval_time.setTime_t(int(evaluation["date"])) readable_evaluation = eval_time.date().toString("MM.dd.yyyy") next_eval_time = QDateTime() next_eval_time.setTime_t(int(evaluation["next_date"])) readable_next_evaluation = next_eval_time.date().toString("MM.dd.yyyy") recommend = ("Yes" if evaluation["recommended"] else "No") html = """ <img style="float: left;" src=":/img/mmt.png" width="200" height="65"> <h1 align="right"> Individual Employee Evaluation including Comments </h1> <hr /> <p> <b>Employee:</b><br /> %s %s (ID# %s)<br /> %s<br /> %s, %s %s<br /> %s </p> <p> <b>Employment Site:</b><br /> %s<br /> %s<br /> %s, %s, %s </p> <table align="center" width="500"> <tr> <th></th> <td></td> </tr> <tr> <td>Date Evaluated</td> <td>%s</td> </tr> <tr> <td>Next Evaluation Date</td> <td>%s</td> </tr> <tr> <th></th> <td></td> </tr> <tr> <td>Quality Score</td> <td>%s</td> </tr> <tr> <td>Quality Comments</td> <td>%s</td> </tr> <tr> <th></th> <td></td> </tr> <tr> <td>Habits Score</td> <td>%s</td> </tr> <tr> <td>Habits Comments</td> <td>%s</td> </tr> <tr> <th></th> <td></td> </tr> <tr> <td>Knowledge Score</td> <td>%s</td> </tr> <tr> <td>Knowledge Comments</td> <td>%s</td> </tr> <tr> <th></th> <td></td> </tr> <tr> <td>Behavior Score</td> <td>%s</td> </tr> <tr> <td>Behavior Comments</td> <td>%s</td> </tr> <tr> <th></th> <td></td> </tr> <tr> <td>Employee Score</td> <td>%s</td> </tr> <tr> <td>Overall Score</td> <td>%s</td> </tr> <tr> <th></th> <td></td> </tr> <tr> <td>Comments</td> <td>%s</td> </tr> <tr> <td>Recommended</td> <td>%s</td> </tr> </table> """ % (employee["first_name"], employee["last_name"], employee["id"], employee["street_address"], employee["city"], employee["state"], employee["zip_code"], employee["phone_number"], employer["name"], employer["street_address"], employer["city"], employer["state"], employer["zip_code"], readable_evaluation, readable_next_evaluation, evaluation["quality_score"], evaluation["quality_comments"], evaluation["habits_score"], evaluation["habits_comments"], evaluation["knowledge_score"], evaluation["knowledge_comments"], evaluation["behavior_score"], evaluation["behavior_comments"], evaluation["average_score"], evaluation["overall_score"], evaluation["comments"], recommend) self.make_page(html) def emit_tps_report(self, employees): html = """ <img style="float: left;" src=":/img/mmt.png" width="200" height="65"> <h1 align="right">TPS Report<br /> </h1> <hr /> """ html += self.generate_sorted_employee_table(employees) self.make_page(html) def emit_sorted_employees(self, employees): html = """ <img style="float: left;" src=":/img/mmt.png" width="200" height="65"> <h1 align="right">All Employees sorted by Evalation Score<br />(highest to lowest)</h1> <hr /> <table align="center" cellspacing="10"> <tr> <th>ID</th> <th>First Name</th> <th>Last Name</th> <th>Email Address</th> <th>Phone Number</th> <th>Cell Number</th> <th>Overall Score</th> </tr> """ for employer, employee, score, comments in employees: html += """ <tr> <td>%s</td> <td>%s</td> <td>%s</td> <td>%s</td> <td>%s</td> <td>%s</td> <td>%s</td> </tr> """ % (employee["id"], employee["first_name"], employee["last_name"], employee["email_address"], employee["phone_number"], employee["cell_number"], score) html += "</table>" self.make_page(html) def paper_mode(self): self.handler.setOutputFormat(QPrinter.NativeFormat) self.handler.setOutputFileName("") def pdf_mode(self, file_name): self.handler.setOutputFormat(QPrinter.PdfFormat) self.handler.setOutputFileName(file_name) def run(self): page_num = 1 last_page = len(self.pages) self.painter = QPainter(self.handler) for page in self.pages: width = self.painter.viewport().width() height = self.painter.viewport().height() rect = QRect(0, 0, width, height) self.painter.save() self.painter.setViewport(rect) page.setTextWidth(width) page.drawContents(self.painter) self.painter.restore() if page_num != last_page: self.handler.newPage() page_num += 1 self.painter.end() self.reset()