def testQColor(self): # QBrush(QColor) constructor color = QColor("black") obj = QBrush(color) self.assertEqual(obj.color(), color) obj = QBrush(Qt.blue) self.assertEqual(obj.color(), Qt.blue)
def paint(self, painter: QPainter, styleOption: QStyleOptionGraphicsItem, widget: QWidget=None): pen = QPen() pen.setWidthF(0.05) pen.setColor(Qt.darkGray) painter.setPen(pen) brush = QBrush() brush.setColor(self.color) brush.setStyle(Qt.SolidPattern) painter.setBrush(brush) topLeft = QPointF(0, 0) bottomRight = QPointF(1, 1) rectangle = QRectF(topLeft, bottomRight) rectangle.translate(-0.5, -0.5) painter.drawRect(rectangle)
def paintEvent(self, paintEvent: QPaintEvent): painter = QPainter(self) painter.setBackgroundMode(Qt.TransparentMode) painter.setRenderHint(QPainter.Antialiasing) brush = QBrush() brush.setStyle(Qt.SolidPattern) pen = QPen() pen.setJoinStyle(Qt.RoundJoin) pen.setCapStyle(Qt.RoundCap) center = QPoint(self.width() // 2, self.height() // 2) radius = 0.45 * min(self.width(), self.height()) pen.setColor(self.palette().color(self.color[0])) brush.setColor(self.palette().color(self.color[1])) if self.highlight is True: pen.setColor(self.palette().color(QPalette.Highlight)) pen.setWidth(round(0.15 * radius)) painter.setBrush(brush) painter.setPen(pen) painter.drawEllipse(center, radius, radius) if self.checked is True: brush.setColor(self.palette().color(QPalette.Background)) pen.setColor(self.palette().color(QPalette.Background)) painter.setPen(pen) painter.setBrush(brush) painter.drawEllipse(center, 0.40 * radius, 0.40 * radius) del painter, brush, pen
def paintEvent(self, ev): qp = QPainter(self) qp.setRenderHint(QPainter.Antialiasing) for p in self.points: pen = QPen(p['color'], 5) brush = QBrush(p['color']) qp.setPen(pen) qp.setBrush(brush) qp.drawEllipse(QPoint(p['x'], p['y']), 5, 5)
def modifyMove(self, label): """ Put a move to a modified state :param label: label of the move :return: No return """ # Check if there's a move in modifying state for row in range(self.__listOfMoveLabels.count()): if not self.__listOfMoveLabels.item(row).getMove().isNew: self.__listOfMoveLabels.item(row).getMove().isNew = True self.__listOfMoveLabels.item(row).setBackground( QBrush(Qt.white)) moveToModify = label.getMove() moveToModify.isNew = False label.setBackground(QBrush(Qt.darkCyan)) label.goToMoveOfTheLabel() self.updateSlidersPositions()
def _init_bg(self): extent = self._extent self._bg = QGraphicsEllipseItem(-0.5 * extent, -0.5 * extent, extent, extent, self) self._bg.setPen(Qt.NoPen) bg_color = QGuiApplication.palette().color(QPalette.Normal, QPalette.Window) bg_color.setAlphaF(0.8) self._bg_brush = QBrush(bg_color)
def addNode(self): greenBrush = QBrush(Qt.green) blackPen = QPen(Qt.black) # blueBrush = QBrush(Qt.blue) blackPen.setWidth(5) ellipse = GraphicsEllipse(str(self.current_id), blackPen, greenBrush, 100, 100, NODE_D, NODE_D) self.scene.addItem(ellipse) self.current_id += 1
def load_dataList(self, nameList, showThumbnail=True, progressBar=True): self.dataList.clear() if progressBar: progress = QProgressDialog("Loading data...", "Abort", \ 0, len(nameList), self.window) progress.setWindowModality(Qt.WindowModal) for i, dataName in enumerate(nameList): newItem = QtWidgets.QListWidgetItem(dataName) # Mark finished data if self.in_task and (dataName in self.current_task.finished_data): newItem.setBackground(QBrush(QColor("#b3b3b3"))) if showThumbnail: # boring img down sizing and img format converting img = Image.open(self.current_data_dir + IMG_FOLDER \ + '/' + dataName + '.' + IMG_EXT) w, h = img.size img = img.resize((128, int(128 * h / w))) img = img.convert("RGBA") qimg = QImage(img.tobytes('raw', 'RGBA'), img.size[0], \ img.size[1], QImage.Format_RGBA8888) thumbnail = QIcon() thumbnail.addPixmap(QtGui.QPixmap.fromImage(qimg)) newItem.setIcon(thumbnail) # pre load all the labels label_dir = self.current_data_dir + LEBEL_FOLDER \ + '/' + dataName + '.txt' if os.path.exists(label_dir): with open(label_dir, 'r') as label_file: bboxs = [] for line in label_file: bbox_l = line.split() class_num = int(bbox_l[0]) centerX = int(float(bbox_l[1]) * w) centerY = int(float(bbox_l[2]) * h) width = int(float(bbox_l[3]) * w) height = int(float(bbox_l[4]) * h) new_bbox = BBox([centerX, centerY, width, height],\ [w, h], class_num) bboxs.append(new_bbox) label_table[dataName] = bboxs else: # self.error_msg("Cannot find label: " + \ # label_dir) # if the label do not exist, create an empty bbox list bboxs = [] label_table[dataName] = bboxs self.dataList.addItem(newItem) if progressBar: progress.setValue(i) if progress.wasCanceled(): break if progressBar: progress.setValue(len(nameList))
def fromCross(cls, *args, **kwargs): color = QColor(0, 0, 0) item = cls(*args, **kwargs) item.setPolygon(cls.cross) item.setPen(QPen(color)) item.setBrush(QBrush(color)) # set move range to parent bounding rect item.moveRange = item.parentItem().boundingRect() return item
def __setStyle(self): # disable selection color to keep syntax highlighting when a selection occurs palette = self.palette() palette.setBrush(QPalette.HighlightedText, QBrush(Qt.NoBrush)) self.setPalette(palette) # remove scrollbars style self.verticalScrollBar().setStyle(QCommonStyle()) self.horizontalScrollBar().setStyle(QCommonStyle())
def fromTriangle(cls, *args, **kwargs): color = QColor(255, 255, 255) item = cls(*args, **kwargs) item.setPolygon(cls.triangle) item.setPen(QPen(color)) item.setBrush(QBrush(color)) # set move range to parent bounding rect item.moveRange = item.parentItem().boundingRect() return item
def create_ui(self): scene = QGraphicsScene(self) greenBrush = QBrush(Qt.red) blueBrush = QBrush(Qt.blue) blackPen = QPen(Qt.black) blackPen.setWidth(1) ellipse = scene.addEllipse(0, 0, 20, 20, blackPen, greenBrush) ellipse2 = scene.addEllipse(-30, -30, 20, 20, blackPen, blueBrush) ellipse.setFlag(QGraphicsItem.ItemIsMovable) ellipse2.setFlag(QGraphicsItem.ItemIsMovable) self.view = QGraphicsView(scene, self) self.view.setGeometry(0, 0, 640, 440)
def __init__(self, sb20): QWidget.__init__(self) self.sb20 = sb20 self.service = None self.pen = QPen() self.brush = QBrush() self.setMinimumHeight(150) self.setMinimumWidth(300) self.sb20.gears_changed.connect(self.update_gears)
def fromCross(cls, parent=None): color = QColor(0, 0, 0) item = activeMarker(parent=parent) item.setPolygon(cls.cross) item.setPen(QPen(color)) item.setBrush(QBrush(color)) # set move range to parent bounding rect item.moveRange = item.parentItem().boundingRect().bottomRight() return item
def __init__(self): super().__init__() # Objects self.brush = QBrush() self.folderModel = QStandardItemModel() # Styling self.setModel(self.folderModel) self.setFrameStyle(QFrame.NoFrame) self.setEditTriggers(QAbstractItemView.NoEditTriggers) self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setItemDelegate(ListDelegate.ListDelegate()) self.setAttribute(Qt.WA_TranslucentBackground) self.brush.setColor(ThemeManager.BG_QC) self.brush.setStyle(Qt.SolidPattern) self.populate()
def fromTriangle(cls, parent=None): color = QColor(255, 255, 255) item = activeMarker(parent=parent) item.setPolygon(cls.triangle) item.setPen(QPen(color)) item.setBrush(QBrush(color)) # set move range to parent bounding rect item.moveRange = item.parentItem().boundingRect().bottomRight() return item
def paintEvent(self, event): self.painter.begin(self) pen0 = QPen() pen0.setWidth(0) pen_def = self.painter.pen() pen_white = QPen(QColor(255, 255, 255)) pen_black = QPen(QColor(0, 0, 0)) pen_blue = QPen(QColor(0, 0, 255)) pen_red = QPen(QColor(255, 0, 0)) brush_black = QBrush(QColor(0, 0, 0)) brush_ready = QBrush(QColor(170, 255, 255)) brush_csak1 = QBrush(QColor(255, 255, 255)) brush_end = QBrush(QColor(200, 255, 150)) if self._player1_id == self._player2_id: self.painter.setBrush(brush_black) self.painter.setPen(pen0) self.painter.drawRect(0, 0, 49, 49) # self.painter.setPen(pen_red) # self.painter.drawText(2, 10, str(self._player1_id)) # self.painter.drawText(2, 20, str(self._player2_id)) # self.painter.drawText(20, 35, "X") elif self._player1_id == 0 or self._player2_id == 0: self.painter.setBrush(brush_csak1) self.painter.setPen(pen0) self.painter.drawRect(0, 0, 49, 49) # self.painter.setPen(pen_blue) # self.painter.drawText(2, 10, str(self._player1_id)) # self.painter.drawText(2, 20, str(self._player2_id)) # self.painter.drawText(25, 30, "X") else: if self._pontszam >= 0: self.painter.setBrush(brush_end) else: self.painter.setBrush(brush_ready) self.painter.setPen(pen0) self.painter.drawRect(0, 0, 49, 49) self.painter.setPen(pen_black) self.painter.drawText(12, 20, str(self._leg1)) self.painter.drawText(23, 20, " : ") self.painter.drawText(33, 20, str(self._leg2)) if self._pontszam >= 0: self.painter.drawText(21, 32, str(self._pontszam)) self.painter.end()
def addPoint(self, index, x, y): brush = QBrush() brush.setStyle(Qt.SolidPattern) # 实心填充模式 if index == 0: brush.setColor(self.point_color[0]) else: i = (index - 1) // 4 + 1 brush.setColor(self.point_color[i]) lx, ly = self.center2LeftTop(x, y) self.current_point = self.addEllipse(lx, ly, self.wh, self.wh, self.pen, brush) self.points_list.append(self.current_point)
def paint(self, painter): total_layers = len(self.network.hidden_layers) + 2 chunk_x = float(self.rect.width()) / (total_layers + 1) layers = [self.network.input_layer ] + self.network.hidden_layers + [self.network.output_layer] x = chunk_x neuron_pos = {} # draw neurons painter.setPen(self.neuron_pen) painter.setBrush(self.neuron_brush) for i in range(total_layers): layer = layers[i] total_neurons = len(layer) chunk_y = float(self.rect.height()) / (total_neurons + 1) y = chunk_y for j in range(total_neurons): neuron = layer[j] neuron_pos[neuron] = (x, y) y += chunk_y x += chunk_x # draw connections for layer in layers: for neuron in layer: x, y = neuron_pos[neuron] for i, neuron_input in enumerate(neuron.inputs): w = neuron.weights[i] if w >= 0.0: c = QColor(0, 0, 100 * w) elif w < 0.0: c = QColor(w * -1.0 * 100, 0, 0) painter.setPen(QPen(c)) input_x, input_y = neuron_pos[neuron_input] painter.drawLine(self.rect.x() + x, self.rect.y() + y, self.rect.x() + input_x, self.rect.y() + input_y) n_size = self.get_neuron_size() h_size = n_size / 2 for n, pos in neuron_pos.items(): x, y = pos o = (n.output + 1.0) / 2.0 b = QBrush(QColor(o * 255, o * 255, o * 255)) p = QPen(QColor()) painter.setPen(p) painter.setBrush(b) painter.drawEllipse(self.rect.x() + x - h_size, self.rect.y() + y - h_size, n_size, n_size) if self.draw_output_value: painter.drawText(x, y - 20, str('{:.2f}'.format(n.output)))
def drawHeader(self): """Draw logo/copyright in the header""" pHeight = 90 pMargin = 15 icon_path = cm.DIR_ICONS + "app.png" self.header_lbl.setMinimumHeight(pHeight) self.header_lbl.setFrameShape(QFrame.StyledPanel) self.header_lbl.setContentsMargins(0, 0, 0, 0) pixmap = QPixmap(450, pHeight) pixmap.fill(Qt.transparent) iconY = (pHeight - 64) / 2 logoRect = QRect(pMargin, iconY, 64, 64) painter = QPainter(pixmap) painter.setBrush(QBrush(Qt.red)) painter.drawPixmap( logoRect, QPixmap(icon_path).scaled( logoRect.width(), logoRect.height(), Qt.KeepAspectRatio, Qt.SmoothTransformation, ), ) titleRect = QRect(logoRect.right() + 10, iconY, 200, pHeight) font = QFont() font.setBold(True) font.setPixelSize(16) painter.setFont(font) painter.setPen(QPen(QApplication.instance().palette().text().color())) painter.drawText(titleRect, Qt.AlignTop, "Cutevariant") font_metrics = QFontMetrics(font) font.setBold(False) font.setPixelSize(12) painter.setFont(font) painter.setPen(QPen(Qt.darkGray)) titleRect.setY(titleRect.y() + font_metrics.height()) painter.drawText( titleRect, Qt.AlignTop, f"Version %s\nGPL3 Copyright (C) 2018-2020\nLabsquare.org" % __version__, ) self.header_lbl.setPixmap(pixmap) # Painting is finished ! # Avoid Segfault: # QPaintDevice: Cannot destroy paint device that is being painted painter.end()
def __init__(self, toolbox, src_connector, dst_connector, resource_filters=None): """A graphics item to represent the connection between two project items. Args: toolbox (ToolboxUI): main UI class instance src_connector (ConnectorButton): Source connector button dst_connector (ConnectorButton): Destination connector button resource_filters (dict,optional): Mapping resource labels to filter types to list of values """ super().__init__(toolbox) if resource_filters is None: resource_filters = {} self.src_connector = src_connector # QGraphicsRectItem self.dst_connector = dst_connector self.src_icon = src_connector._parent self.dst_icon = dst_connector._parent self.selected_pen = QPen(Qt.black, 1, Qt.DashLine) self.normal_pen = QPen(Qt.black, 0.5) self._filter_icon_extent = 4 * self.magic_number self._filter_icon = FilterIcon(0, 0, self._filter_icon_extent, self._filter_icon_extent, self) self._filter_icon.setPen(self.normal_pen) self.setToolTip("<html><p>Connection from <b>{0}</b>'s output " "to <b>{1}</b>'s input</html>".format( self.src_icon.name(), self.dst_icon.name())) self.setBrush(QBrush(QColor(255, 255, 0, 204))) self.parallel_link = None self.setFlag(QGraphicsItem.ItemIsSelectable, enabled=True) self.setFlag(QGraphicsItem.ItemIsFocusable, enabled=True) self.setZValue( 0.5 ) # This makes links appear on top of items because item zValue == 0.0 self.update_geometry() self._color = QColor(255, 255, 0, 204) self._exec_color = None self.resource_filters = resource_filters self.resource_filter_model = ResourceFilterModel(self) self.db_mngr = toolbox.db_mngr self._fetched_db_resources = dict() self._unfetched_db_resources = dict() self._obsolete_db_urls = set() self.db_mngr.scenarios_added.connect( self.resource_filter_model.add_scenarios) self.db_mngr.tools_added.connect(self.resource_filter_model.add_tools) self.db_mngr.scenarios_updated.connect( lambda _: self.resource_filter_model.refresh_model()) self.db_mngr.tools_updated.connect( lambda _: self.resource_filter_model.refresh_model()) self.db_mngr.scenarios_removed.connect( self.resource_filter_model.remove_scenarios) self.db_mngr.tools_removed.connect( self.resource_filter_model.remove_tools)
def extract_spot_source_price(self): """ 提取现货数据 """ self.final_data.clear() current_date = self.current_date.text() self.today_str = datetime.strptime(current_date, "%Y-%m-%d").strftime("%Y%m%d") source_str = self.source_edit.text().strip() if not source_str: self.tip_label.setText("请输入源数据再进行提取! ") return self.tip_label.setText("正在提取数据... ") variety_item_list = re.split(r'[;;。]+', source_str) # 根据分号切割 for row, variety_item in enumerate(variety_item_list): print(variety_item) data_list = re.split(r'[:,:,]+', variety_item) variety_dict = { "date": self.today_str, "variety_en": VARIETY_EN.get(data_list[0].strip(), "未知"), "spot_price": float(data_list[1]), "price_increase": float(data_list[2]) } self.preview_table.insertRow(row) item0 = QTableWidgetItem(variety_dict["date"]) self.preview_table.setItem(row, 0, item0) item1 = QTableWidgetItem(data_list[0].strip()) self.preview_table.setItem(row, 1, item1) item2 = QTableWidgetItem(variety_dict["variety_en"]) self.preview_table.setItem(row, 2, item2) item3 = QTableWidgetItem(str(variety_dict["spot_price"])) self.preview_table.setItem(row, 3, item3) item4 = QTableWidgetItem(str(variety_dict["price_increase"])) self.preview_table.setItem(row, 4, item4) if variety_dict["variety_en"] == "未知": item0.setForeground(QBrush(QColor(250, 100, 100))) item1.setForeground(QBrush(QColor(250, 100, 100))) item2.setForeground(QBrush(QColor(250, 100, 100))) item3.setForeground(QBrush(QColor(250, 100, 100))) item4.setForeground(QBrush(QColor(250, 100, 100))) self.final_data.append(variety_dict) self.tip_label.setText("数据提取完成! ")
def _updateStat(self, raw, thresh): red = QBrush(QColor(255, 0, 0)) for i in range(len(raw)): d = raw[self.item(i, 0).text()] if int(d.pm > thresh) != d.ym: it = self.item(i, 1) it.setForeground(red) if d.yb is not None and argmax(d.pb) != d.yb: it = self.item(i, 2) it.setForeground(red)
def __init__(self): super(ImageViewer, self).__init__() self.painter = QPainter() self.my_pen = QPen(QColor("red")) self.my_pen.setWidth(5) self.my_brush = QBrush(QColor("#123456")) self.photo = QPixmap() self.photo_rect = QRect()
def lineTo(self, state: LineTo): LOG.debug(state) p = self._paint(self.surface) set_rop2(state.rop2, p) p.setBackgroundMode(Qt.TransparentMode if state.bgMode == BACKMODE_TRANSPARENT else Qt.OpaqueMode) p.setBackground(QBrush(rgb_to_qcolor(state.bg))) p.setPen(QPen(rgb_to_qcolor(state.penColor))) p.drawLine(state.x0, state.y0, state.x1, state.y1) self._end(p)
def from_range(self, build_range): self.build_range = build_range mid = build_range.mid_point() bounds = (0, len(build_range) - 1) row = -1 for i, future in enumerate(build_range.future_build_infos): column = i % self.COLUMNS if column == 0: row += 1 item = BuildItem(future, column * BuildItem.WIDTH + self.SPACE * column, row * BuildItem.WIDTH + self.SPACE * row, selectable=i not in bounds) if i == mid: item.setBrush(QBrush(Qt.blue)) self.mid_build = item elif i in bounds: item.setBrush(QBrush(Qt.lightGray)) self.addItem(item)
def _createLineChart(self) -> QtCharts.QChartView: self._chart = QtCharts.QChart() self._chart.setAnimationOptions(QtCharts.QChart.SeriesAnimations) self._chart.setTitle("Détections cumulées") self._chart.legend().setVisible(False) self._chart.setBackgroundBrush(QBrush(QColor("transparent"))) self._chart.setMargins(QMargins(0, 0, 0, 0)) title_font = QFont(Loader.QSSVariable("@font")) title_font.setPointSize(14) self._chart.setTitleFont(title_font) self._chart.setTitleBrush(QBrush(Loader.QSSColor("@dark"))) chart_view = QtCharts.QChartView(self._chart) chart_view.setRenderHint(QPainter.Antialiasing) return chart_view
def query_spot_price_reply(self): """ 获取指定日期现货数据返回 """ reply = self.sender() data = reply.readAll().data() if reply.error(): self.modify_tip_label.setText("获取{}现货动态数据失败:\n{}".format( self.modify_date_edit.text(), reply.error())) else: data = json.loads(data.decode("utf-8")) self.modify_tip_label.setText(data["message"]) reply.deleteLater() self.modify_table.clearContents() self.modify_table.setRowCount(0) for row, row_item in enumerate(data["data"]): self.modify_table.insertRow(row) item0 = QTableWidgetItem(str(row_item["id"])) item1 = QTableWidgetItem(row_item["date"]) item2 = QTableWidgetItem(row_item["variety_en"]) item3 = QTableWidgetItem(str(row_item["spot_price"])) item4 = QTableWidgetItem(str(row_item["price_increase"])) item0.setTextAlignment(Qt.AlignCenter) item1.setTextAlignment(Qt.AlignCenter) item2.setTextAlignment(Qt.AlignCenter) item3.setTextAlignment(Qt.AlignCenter) item4.setTextAlignment(Qt.AlignCenter) # ID 日期 品种不支持修改 item0.setFlags(Qt.ItemIsEditable) item0.setForeground(QBrush(QColor(50, 50, 50))) item1.setFlags(Qt.ItemIsEditable) item1.setForeground(QBrush(QColor(50, 50, 50))) item2.setFlags(Qt.ItemIsEditable) item2.setForeground(QBrush(QColor(50, 50, 50))) self.modify_table.setItem(row, 0, item0) self.modify_table.setItem(row, 1, item1) self.modify_table.setItem(row, 2, item2) self.modify_table.setItem(row, 3, item3) self.modify_table.setItem(row, 4, item4) m_button = QPushButton("确定", self) m_button.setObjectName("modifyButton") m_button.setCursor(Qt.PointingHandCursor) setattr(m_button, 'row_index', row) m_button.clicked.connect(self.modify_row_data) self.modify_table.setCellWidget(row, 5, m_button)
def reset_formats(): f = QTextCharFormat() f.setForeground(QBrush(Conf.pseudocode_keyword_color)) f.setFontWeight(QFont.Bold) FORMATS['keyword'] = f f = QTextCharFormat() f.setForeground(QBrush(Conf.pseudocode_quotation_color)) FORMATS['quotation'] = f f = QTextCharFormat() f.setForeground(QBrush(Conf.pseudocode_function_color)) f.setFontWeight(QFont.Bold) FORMATS['function'] = f f = QTextCharFormat() f.setForeground(QBrush(Conf.pseudocode_comment_color)) f.setFontWeight(QFont.Bold) FORMATS['comment'] = f
def paint(self, qpainter, options, widget): """ Overrides QGraphicsItemGroup paint @param qpainter: @param options: @param widget: @return: """ # local coordinates qpainter.save() if self.isSelected(): qpainter.setBrush(QBrush(QColor(255, 255, 255))) else: qpainter.setBrush(QBrush(QColor(0,0,0))) if self.isSelected(): # self.mouseIsPressed: qpainter.setPen(QPen(Qt.white, 1, Qt.DotLine, Qt.RoundCap)) for child in self.childItems(): qpainter.drawLine(QPointF(), child.pos()) qpainter.restore()
def __init__(self, *a, **kw): data = kw.pop("data") self.name = kw.pop("name") self.window = kw.pop("window") super().__init__(0, 0, 0, 0) self.setAcceptedMouseButtons(Qt.LeftButton) self.label = QGraphicsTextItem("", self) self.bottom_edge = QGraphicsRectItem(0, 0, 0, 0, self) self.bottom_edge.setBrush(QBrush("red", Qt.SolidPattern)) self.update_visuals(data)
def __init__(self, matchList: List[XBuchungstextMatch]): IccTableModel.__init__(self) self._matchlist: List[XBuchungstextMatch] = matchList self._keylist = ("umlegbar", "master_name", "mobj_id", "kreditor", "buchungstext") self._headers = ("u", "Haus", "Whg", "Kreditor", "Buchungstext") self._greyBrush = QBrush(Qt.gray) self._columnUmlegbar = 0 self._sortable = False
def paint(self, painter, option, widget): detail = option.levelOfDetailFromTransform(painter.worldTransform()) if detail < 0.3: return painter.setPen(QPen(self.current_color, 2, Qt.SolidLine)) painter.drawPath(self.path) painter.setBrush(QBrush(self.current_color)) painter.drawPolygon(self.arrow)
def __init__(self, tetris: Tetris): super(QTetris.QScene, self).__init__() self.tetris = tetris pen = QPen() pen.setWidthF(0.05) pen.setColor(Qt.lightGray) brush = QBrush(Qt.NoBrush) rect = QRectF(0, 0, tetris.num_rows, tetris.num_columns) rect.translate(-0.5, -0.5) self.setSceneRect(rect) self.addRect(rect, pen, brush) self.setBackgroundBrush(self.palette().window()) for column in range(0, tetris.num_columns, 2): pen = QPen(Qt.NoPen) brush = QBrush(Qt.SolidPattern) brush.setColor(Qt.lightGray) topLeft = QPointF(0, column) bottomRight = QPointF(tetris.num_rows, column + 1) rectangle = QRectF(topLeft, bottomRight) rectangle.translate(-0.5, -0.5) self.addRect(rectangle, pen, brush)