def FCFSsimulation(self): self.WaitingTime_display.display( FullProject.FCaverage(int(self.ProcessNoText.text()))) arr2 = FullProject.FCFS(int(self.ProcessNoText.text())) print(arr2) arr = FullProject.FCreturnLeave(int(self.ProcessNoText.text())) print(arr) burst = FullProject.FCFSburst(int(self.ProcessNoText.text())) print(burst) scene = QtWidgets.QGraphicsScene() self.graphicsView_FCFS.setScene(scene) pen = QtGui.QPen(QtCore.Qt.black, 3) brush = QtGui.QBrush(QtCore.Qt.lightGray) n = len(arr) next = 0 for i in range(n): if burst[i] < 3: m = 20 * burst[i] elif burst[i] < 5: m = 10 * burst[i] else: m = burst[i] if i == 0: r = QtCore.QRectF(QtCore.QPointF(10, 0), QtCore.QSizeF(m * burst[i], 80)) scene.addRect(r, pen, brush) next = r.right() mytext1 = QGraphicsSimpleTextItem(str(arr2[i])) scene.addItem(mytext1) mytext1.setPos((next - burst[i] - 18), 30) mytext1.setScale(1.5) mytext2 = QGraphicsSimpleTextItem(str(arr[i])) scene.addItem(mytext2) mytext2.setPos(m * burst[i], 85) mytext2.setScale(1.3) else: r = QtCore.QRectF(QtCore.QPointF(next, 0), QtCore.QSizeF(m * burst[i], 80)) scene.addRect(r, pen, brush) mytext1 = QGraphicsSimpleTextItem(str(arr2[i])) scene.addItem(mytext1) mytext1.setPos(burst[i] + next, 30) mytext1.setScale(1.5) mytext2 = QGraphicsSimpleTextItem(str(arr[i])) scene.addItem(mytext2) mytext2.setPos(m * burst[i] + next, 85) mytext2.setScale(1.3) next = r.right()
def RRsimulation(self): burst = int(self.ProcessNoText.text()) arr2 = FullProject.GChart average = FullProject.RR(int(self.ProcessNoText.text()), int(self.ProcessNoText_2.text())) self.WaitingTime_display.display(average) arr = FullProject.RRdepart scene = QtWidgets.QGraphicsScene() self.graphicsView_FCFS.setScene(scene) pen = QtGui.QPen(QtCore.Qt.black, 3) brush = QtGui.QBrush(QtCore.Qt.lightGray) n = len(arr) next = 0 for i in range(n): if burst < 5: m = 5 * burst else: m = burst print(m) if i == 0: r = QtCore.QRectF(QtCore.QPointF(10, 0), QtCore.QSizeF(m * burst, 80)) scene.addRect(r, pen, brush) next = r.right() mytext1 = QGraphicsSimpleTextItem(str(arr2[i])) scene.addItem(mytext1) mytext1.setPos((next - burst - 18), 30) mytext1.setScale(1.5) mytext2 = QGraphicsSimpleTextItem(str(arr[i])) scene.addItem(mytext2) mytext2.setPos(m * burst, 85) mytext2.setScale(1.3) else: r = QtCore.QRectF(QtCore.QPointF(next, 0), QtCore.QSizeF(m * burst, 80)) scene.addRect(r, pen, brush) mytext1 = QGraphicsSimpleTextItem(str(arr2[i])) scene.addItem(mytext1) mytext1.setPos(burst + next, 30) mytext1.setScale(1.5) mytext2 = QGraphicsSimpleTextItem(str(arr[i])) scene.addItem(mytext2) mytext2.setPos(m * burst + next, 85) mytext2.setScale(1.3) next = r.right()
class OverlayGraphics(QGraphicsView): def __init__(self): super(OverlayGraphics, self).__init__() self.setStyleSheet("background:transparent") # ビューの背景透明化 self.overlayScene = QGraphicsScene() self.setScene(self.overlayScene) self.overlayScene.setSceneRect(QRectF(self.rect())) self.createItem() self.luRect = QRect() self.rbRect = QRect() self.isSelected = False self.setTargetMode(False) self.hide() # 初期状態は非表示 def createItem(self): # ターゲットマーカの作成 self.target_circle = QGraphicsEllipseItem( QtCore.QRectF(-10, -10, 20, 20)) self.target_circle.setBrush(QBrush(Qt.red)) self.target_circle.setPen(QPen(Qt.black)) self.overlayScene.addItem(self.target_circle) self.setTargetMode(False) # モーダルの作成:モーダルはターゲット位置に追従する self.pop_rect = QGraphicsRectItem(QtCore.QRectF(0, 0, 100, 60), self.target_circle) self.pop_rect.setBrush(QBrush(Qt.gray)) self.pop_rect.setPen(QPen(Qt.gray)) self.pop_rect.setOpacity(0.8) # 透明度を設定 self.operate_text = QGraphicsSimpleTextItem("", self.pop_rect) self.operate_text.setScale(1.7) self.sub_operate_text = QGraphicsSimpleTextItem("", self.pop_rect) self.sub_operate_text.setScale(1.7) self.setTargetPos(400, 180, DirectionEnum.VERTICAL.value) # オーバレイヤのサイズが変わると呼び出される.シーンのサイズをビューの大きさに追従(-5 はマージン) def resizeEvent(self, event): self.overlayScene.setSceneRect( QRectF(0, 0, self.size().width() - 5, self.size().height() - 5)) # ウィンドウ左上からの位置(画面位置からウインドウ左上の位置を引く) def setTargetPos(self, x_pos, y_pos, direction): self.target_circle.setPos(QPointF(x_pos, y_pos)) self.setPopPos(direction) def setPopTextPos(self, text1, text2): lentext1 = len(text1) lentext2 = len(text2) if lentext2 == 0: self.operate_text.setPos( (self.pop_rect.rect().size().width() / 2) - (lentext1 / 2 * 14), 15) else: self.operate_text.setPos( (self.pop_rect.rect().size().width() / 2) - (lentext1 / 2 * 14), 5) self.sub_operate_text.setPos( (self.pop_rect.rect().size().width() / 2) - (lentext2 / 2 * 14), 30) def setPopPos(self, direction): if direction == DirectionEnum.VERTICAL.value: # モーダルを右に表示しきれない場合に左に表示 if self.target_circle.pos().x() > self.overlayScene.width( ) - self.pop_rect.rect().size().width() * 1.5: self.pop_rect.setPos( -self.pop_rect.rect().size().width() * 1.5, -self.pop_rect.rect().size().height() / 2) else: # 右に表示 self.pop_rect.setPos(self.pop_rect.rect().size().width() / 2, -self.pop_rect.rect().size().height() / 2) else: # モーダルを下に表示しきれない場合に上に表示 if self.target_circle.pos().y() > self.overlayScene.height( ) - self.pop_rect.rect().size().height() * 1.5: self.pop_rect.setPos( -self.pop_rect.rect().size().width() / 2, -self.pop_rect.rect().size().height() * 1.5) else: # 下に表示 self.pop_rect.setPos(-self.pop_rect.rect().size().width() / 2, self.pop_rect.rect().size().height() / 2) def setTargetMode(self, active): self.targetMode = active if active: self.target_circle.setRect(-10, -10, 20, 20) else: # ターゲットを非表示にする self.target_circle.setRect(0, 0, 0, 0) # def targetVisible(self, visible): # if visible: # self.target_circle.setRect(-10, -10, 20, 20) # else: # self.target_circle.setRect(0, 0, 0, 0) def feedbackShow(self, text1, text2, direction): if self.isSelected: self.operate_text.setText(text1) self.sub_operate_text.setText(text2) # ターゲットモードがアクティブでないとき,ターゲットマーカの位置は選択セルに依存 if not self.targetMode: if direction == DirectionEnum.HORIZON.value: x_pos = (self.luRect.left() + self.rbRect.right()) / 2 + 20 y_pos = self.rbRect.bottom( ) - self.rbRect.height() / 2 + 20 else: x_pos = self.rbRect.right() - self.rbRect.width() / 2 + 20 y_pos = (self.luRect.top() + self.rbRect.bottom()) / 2 + 20 self.setTargetPos(x_pos, y_pos, direction) self.setPopTextPos(text1, text2) self.show()
def Priosimulation(self): FullProject.preemptive_priority(int(self.ProcessNoText.text())) averagetime = FullProject.averagetime(int(self.ProcessNoText.text())) print(averagetime) self.WaitingTime_display.display(averagetime) for i in range(len(FullProject.SJprecurrent_running)): if FullProject.current_running[i] != "IDLE": FullProject.current_running[i] = "IDLE" else: FullProject.current_running[i] = "P" + str( FullProject.current_running[i]) print(FullProject.current_running) arr2 = [] lastdone = FullProject.current_running[0] arr2.append(lastdone) for i in range(len(FullProject.current_running)): if FullProject.current_running[i] != lastdone: arr2.append(FullProject.current_running[i]) lastdone = FullProject.current_running[i] print(arr2) burst = [] jstart = 0 for i in range(len(arr2)): searchn = arr2[i] burstno = 0 index = 0 for j in range(jstart, len(FullProject.current_running)): if FullProject.current_running[j] == searchn: burstno += 1 else: break jstart = jstart + burstno burst.append(burstno) print(burst) SJFdep = [] depsum = 0 for i in range(len(arr2)): depsum = depsum + burst[i] SJFdep.append(depsum) arr = SJFdep scene = QtWidgets.QGraphicsScene() self.graphicsView.setScene(scene) pen = QtGui.QPen(QtCore.Qt.black, 3) brush = QtGui.QBrush(QtCore.Qt.lightGray) print(arr) print(arr2) print(burst) n = len(arr) next = 0 for i in range(n): if burst[i] < 3: m = 20 * burst[i] elif burst[i] < 5: m = 10 * burst[i] else: m = burst[i] if i == 0: r = QtCore.QRectF(QtCore.QPointF(10, 0), QtCore.QSizeF(m * burst[i], 80)) scene.addRect(r, pen, brush) next = r.right() mytext1 = QGraphicsSimpleTextItem(str(arr2[i])) scene.addItem(mytext1) mytext1.setPos((next - burst[i] - 18), 30) mytext1.setScale(1.5) mytext2 = QGraphicsSimpleTextItem(str(arr[i])) scene.addItem(mytext2) mytext2.setPos(m * burst[i], 85) mytext2.setScale(1.3) else: r = QtCore.QRectF(QtCore.QPointF(next, 0), QtCore.QSizeF(m * burst[i], 80)) scene.addRect(r, pen, brush) mytext1 = QGraphicsSimpleTextItem(str(arr2[i])) scene.addItem(mytext1) mytext1.setPos(burst[i] + next, 30) mytext1.setScale(1.5) mytext2 = QGraphicsSimpleTextItem(str(arr[i])) scene.addItem(mytext2) mytext2.setPos(m * burst[i] + next, 85) mytext2.setScale(1.3) next = r.right()