class AbstractDetective(AbstractPlayer): def __init__(self, engine, is_ai=False, name=None): super().__init__(engine, is_ai=is_ai) icon = choice(icons) if name is None: name = "Detective " + icon.capitalize() iconspath = pkg_resources.resource_filename("ScotlandPYard.resources", "icons") iconpath = join(iconspath, icon + ".svg") self.icon = QGraphicsSvgItem(iconpath) self.icon.setScale(0.05) self.name = name self.tickets = {"Bus": 8, "Taxi": 10, "Underground": 4} def get_role(self): return "detective"
def __setup_interface(self): """ Initialise user interface elements """ theme = "light_theme.qss" if GWASMiner.config.get(section="preferences", option="theme").lower() == "dark": theme = "dark_theme.qss" self.__load_style(theme) self.form.stackedWidget.setGeometry(0, 0, self.window.width(), self.window.height()) self.navigate_to_page(0) self.form.status_lbl.setHidden(True) self.set_loading_visible(True) splash_loading_scene = QGraphicsScene() main_loading_scene = QGraphicsScene() splash_loading_svg = QGraphicsSvgItem("res/loading.svg") splash_loading_svg.setScale(0.4) main_loading_svg = QGraphicsSvgItem("res/loading.svg") main_loading_svg.setScale(0.4) splash_loading_scene.addItem(splash_loading_svg) main_loading_scene.addItem(main_loading_svg) self.form.test_loading_graphicsview.setScene(splash_loading_scene) self.form.loading_svg.setScene(main_loading_scene)
class svg_size(QDialog): def showEvent(self, event): #self.grview.fitInView(self.scene.sceneRect(), Qt.KeepAspectRatio) pass def standard_size(self): # size in sqares times squaresize, minus distance from square borders w = self.ui.spin_width.value() * self.squaresize - 10 h = self.ui.spin_height.value() * self.squaresize - 10 standard_size = QRectF(0, 0, w, h) start_pos = QPointF(self.startpos + 5, self.startpos + 5) self.start_bounding_rect = QRectF(self.startpos + 5, self.startpos + 5, w, h) self.accept_rect(standard_size, start_pos) self.user_rect.setRect(self.start_bounding_rect) def __init__(self, parent=None, original_path=None, icon_path=None, xmax=1100, ymax=1100, squaresize=100): super(svg_size, self).__init__(parent) # boilerplate initialization self.xmax = xmax self.ymax = ymax self.squaresize = squaresize self.ui = size_gui() self.ui.setupUi(self) self.startpos = 5 * self.squaresize self.icon_path = Path(icon_path) if icon_path else None self.original_path = Path(original_path) if original_path else None self.outfilepath = None # set up grahpicsView self.grview = MyQGraphicsView(self) self.grview.setGeometry(QRect(0, 0, 571, 571)) self.grview.setContextMenuPolicy(Qt.NoContextMenu) self.grview.setFrameShadow(QFrame.Plain) self.grview.setSizeAdjustPolicy(QAbstractScrollArea.AdjustIgnored) self.grview.setObjectName("graphicsView") #self.ui.graphicsView.wheelEvent = my_mouse_wheel_event self.scene = myGraphicsScene( ) # use my own scene class with the added signal self.scene.setSceneRect(0, 0, self.xmax, self.ymax) # Paint the grid lines every 100 "svg_points" for i in range(0, self.xmax + 1, self.squaresize): self.line(i, hori=False) for i in range(0, self.ymax + 1, self.squaresize): self.line(i, hori=True) # start rect and svg with some standard numbers self.svg = QGraphicsSvgItem(str(icon_path)) self.user_rect = GraphicsRectItem( QRectF(self.startpos + 5, self.startpos + 5, self.squaresize - 10, self.squaresize - 10)) # add svg and rect to scene self.scene.addItem(self.svg) self.scene.addItem(self.user_rect) # set sizes according to spinboxes start_bounding_rect = self.standard_size() # connect interactive elements self.ui.spin_height.valueChanged.connect(self.standard_size) self.ui.spin_width.valueChanged.connect(self.standard_size) self.scene.rect_changed.connect(self.accept_rect) # put the graphics on the screen and show self.grview.setScene(self.scene) #self.grview.fitInView(self.scene.sceneRect(), Qt.KeepAspectRatio) self.grview.show() def retranslateUI(self): _translate = QtCore.QCoreApplication.translate self.graphicsView.setToolTip( _translate( "dialog_symbol_sizing", "After width and height are entered, do the last adjustments in this window" )) def line(self, coord, hori=True): if hori: self.scene.addLine(0, coord, self.xmax, coord, QPen()) else: self.scene.addLine(coord, 0, coord, self.ymax, QPen()) def accept_rect(self, rect, pos): ''' takes the new coordinates from the moved rectangle and applies them to the svg graphic''' br = self.svg.boundingRect() relative = min(br.width(), br.height()) rect_min = min(rect.width(), rect.height()) scale = rect_min / relative self.svg.setScale(scale) self.svg_scale = scale pos_x = pos.x() + rect.x() pos_y = pos.y() + rect.y() self.svg.setX(pos_x) self.svg.setY(pos_y) self.svg_pos = (pos_x % self.squaresize, pos_y % self.squaresize)
class Battery(QGraphicsView): viewUpdate = pyqtSignal() def __init__(self,winParent): QGraphicsView.__init__(self) self.winParent=winParent self.viewUpdate.connect(self.update) self.m_currentValue = 0 self.m_scaleX = 0 self.m_scaleY = 0 self.m_originalHeight = 245 self.m_originalWidth = 245 self.m_originalCtr = QPointF(120,120) self.m_faceZ = -20 self.m_caseZ = 10 self.m_markZ = -30 self.m_mark2Z = -30 self.m_mark3Z = -30 self.m_mark4Z = -30 self.m_mark5Z = -30 self.m_itemFace = None self.m_itemCase = None self.m_itemMark = None self.m_itemMark2 = None self.m_itemMark3 = None self.m_itemMark4 = None self.m_itemMark5 = None self.setStyleSheet("background: transparent; border: none"); self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff) self.setInteractive(False) self.setEnabled(False) self.m_scene = QGraphicsScene(self) self.setScene(self.m_scene) self.init() def init (self): # os.chdir('/Users/zeyneptuna/Desktop/during_flight/widget/battery') self.m_scaleX = self.width() / self.m_originalWidth self.m_scaleY = self.height() / self.m_originalHeight self.m_itemFace = QGraphicsSvgItem("widget/battery/battery_face.svg") self.m_itemFace.setCacheMode (QGraphicsItem.NoCache) self.m_itemFace.setZValue(self.m_faceZ) self.m_itemFace.setTransform(QTransform.fromScale(self.m_scaleX, self.m_scaleY), True) self.m_itemFace.setTransformOriginPoint(self.m_originalCtr) self.m_scene.addItem(self.m_itemFace) self.m_itemCase = QGraphicsSvgItem("widget/battery/battery_case.svg") self.m_itemCase.setCacheMode (QGraphicsItem.NoCache) self.m_itemCase.setZValue(self.m_caseZ) self.m_itemCase.setTransform(QTransform.fromScale(self.m_scaleX, self.m_scaleY), True) self.m_itemCase.setTransformOriginPoint(self.m_originalCtr) self.m_scene.addItem(self.m_itemCase) self.m_itemMark = QGraphicsSvgItem("widget/battery/battery_mark.svg") self.m_itemMark.setCacheMode (QGraphicsItem.NoCache) self.m_itemMark.setZValue(self.m_markZ) self.m_itemMark.setPos(57, 120) self.m_itemMark.setScale(0.77) self.m_scene.addItem(self.m_itemMark) self.m_itemMark2 = QGraphicsSvgItem("widget/battery/battery_mark.svg") self.m_itemMark2.setCacheMode (QGraphicsItem.NoCache) self.m_itemMark2.setZValue(self.m_mark2Z) self.m_itemMark2.setPos(57, 92.5) self.m_itemMark2.setScale(0.77) self.m_scene.addItem(self.m_itemMark2) self.m_itemMark3 = QGraphicsSvgItem("widget/battery/battery_mark.svg") self.m_itemMark3.setCacheMode (QGraphicsItem.NoCache) self.m_itemMark3.setZValue(self.m_mark3Z) self.m_itemMark3.setPos(57, 65) self.m_itemMark3.setScale(0.77) self.m_scene.addItem(self.m_itemMark3) self.m_itemMark4 = QGraphicsSvgItem("widget/battery/battery_mark.svg") self.m_itemMark4.setCacheMode(QGraphicsItem.NoCache) self.m_itemMark4.setZValue(self.m_mark4Z) self.m_itemMark4.setPos(57, 37.5) self.m_itemMark4.setScale(0.77) self.m_scene.addItem(self.m_itemMark4) self.m_itemMark5 = QGraphicsSvgItem("widget/battery/battery_mark.svg") self.m_itemMark5.setCacheMode (QGraphicsItem.NoCache) self.m_itemMark5.setZValue(self.m_mark5Z) self.m_itemMark5.setPos(57, 10) self.m_itemMark5.setScale(0.77) self.m_scene.addItem(self.m_itemMark5) self.centerOn(self.width()/2, self.height()/2) self.updateView() def reinit(self): if (self.m_scene): self.m_scene.clear() self.init() def update(self): self.updateView() def setCurrentVal(self, val): self.m_currentValue = val def resizeEvent (self, event): QGraphicsView.resizeEvent (self,event) self.reinit() def reset (self): self.m_itemFace = None self.m_itemCase = None self.m_itemMark = None self.m_itemMark2 = None self.m_itemMark3 = None self.m_itemMark4 = None self.m_itemMark5 = None self.m_currentValue = 0 def updateView(self): if self.m_currentValue <= 20: self.m_itemMark2.setZValue(-30) elif self.m_currentValue <= 40: self.m_itemMark3.setZValue(-30) elif self.m_currentValue <= 60: self.m_itemMark4.setZValue(-30) elif self.m_currentValue <= 80: self.m_itemMark5.setZValue(-30) elif self.m_currentValue <= 100: self.m_itemMark.setZValue(20) self.m_itemMark2.setZValue(20) self.m_itemMark3.setZValue(20) self.m_itemMark4.setZValue(20) self.m_itemMark5.setZValue(20) self.m_scene.update()