class GUI(QMainWindow): def __init__(self): super().__init__() self.resize(600, 600) self.setWindowTitle("Untitled-Notepad") self.setWindowIcon( QIcon(r'C:\Users\Yash\PycharmProjects\ppppp\Notepad\icons.png')) #self.timer=QTimer(self) #self.timer.timeout.connect(self.geometrychange) #self.timer.start(10) self.menu = QMenuBar(self) self.file = QMenu("File", self.menu) file = self.file.addAction("New") file.setShortcut("Ctrl+N") file.triggered.connect(self.files) opens = self.file.addAction('Open') opens.setShortcut("Ctrl+O") opens.triggered.connect(self.open) save = self.file.addAction("Save") save.setShortcut("Ctrl+S") save.triggered.connect(self.save) saveas = self.file.addAction("Save as") saveas.triggered.connect(self.saveas) self.file.addSeparator() printsetup = self.file.addAction("Print Preview") printsetup.triggered.connect(self.printsetup) prints = self.file.addAction("Print") prints.setShortcut("Ctrl+P") prints.triggered.connect(self.prints) self.file.addSeparator() exits = self.file.addAction("Exit") exits.setShortcut("Alt+X") exits.triggered.connect(self.exists) self.menu.addMenu(self.file) self.edit = QMenu("Edit", self.menu) undo = self.edit.addAction("Undo") undo.setShortcut("Ctrl+Z") undo.triggered.connect(self.undos) self.edit.addSeparator() self.cuts = self.edit.addAction("Cut") self.cuts.setShortcut("Ctrl+X") self.cuts.triggered.connect(self.cut) self.copys = self.edit.addAction("Copy") self.copys.setShortcut("Ctrl+C") self.copys.triggered.connect(self.copy) self.pastes = self.edit.addAction("Paste") self.pastes.setShortcut("Ctrl+V") self.pastes.triggered.connect(self.paste) self.deletes = self.edit.addAction("Delete") self.deletes.setShortcut("Del") self.deletes.triggered.connect(self.delete) self.edit.addSeparator() self.finding = self.edit.addAction("Find") self.finding.setShortcut("Ctrl+F") self.finding.triggered.connect(self.finds) self.findnexts = self.edit.addAction("Find Next") self.findnexts.setShortcut("F3") self.findnexts.triggered.connect(self.nexts) replace = self.edit.addAction("Replace") replace.setShortcut("Ctrl+H") replace.triggered.connect(self.replace) go = self.edit.addAction("Go To") go.setShortcut("Ctrl+G") go.triggered.connect(self.go) check = QTimer(self) check.timeout.connect(self.check) check.start(100) self.edit.addSeparator() select = self.edit.addAction("Select All") select.setShortcut("Ctrl+A") select.triggered.connect(self.select) time = self.edit.addAction("Time/Date") time.setCheckable(True) time.setShortcut("F5") time.triggered.connect(self.todaytime) self.menu.addMenu(self.edit) self.format = QMenu("Format", self.menu) self.wrap = self.format.addAction("Word Wrap") self.wrap.setCheckable(True) self.wrap.setChecked(True) self.wrap.triggered.connect(self.word) font = self.format.addAction("Font") font.triggered.connect(self.fonts) self.menu.addMenu(self.format) self.view = QMenu("View", self.menu) zoom = QMenu("Zoom", self.view) In = zoom.addAction("Zoom In") In.setShortcut("Ctrl++") In.triggered.connect(self.zoomin) out = zoom.addAction("Zoom Out") out.setShortcut("Ctrl+-") out.triggered.connect(self.zoomout) restore = zoom.addAction("Restore Default Zoom") restore.setShortcut("Ctrl+0") restore.triggered.connect(self.restore) self.view.addMenu(zoom) self.statused = self.view.addAction("Status Bar") self.statused.setCheckable(True) self.statused.setChecked(True) self.statused.triggered.connect(self.status) self.menu.addMenu(self.view) self.help = QMenu("Help", self.menu) help = self.help.addAction("View Help") help.triggered.connect(self.helps) self.help.addSeparator() about = self.help.addAction("About Notepad") about.triggered.connect(self.about) self.menu.addMenu(self.help) self.setMenuBar(self.menu) self.centralwidget = QWidget(self) self.textEdit = QTextEdit(self.centralwidget) self.textEdit.setGeometry(QRect(0, 0, 600, 579)) self.textEdit.setUndoRedoEnabled(True) font = QFont() font.setFamily('Arial') font.setPointSize(16) self.textEdit.setFont(font) self.textEdit.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn) self.textEdit.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn) self.textEdit.setLineWrapMode(self.textEdit.WidgetWidth) self.textEdit.setLineWidth(2) try: self.path = str(sys.argv[1]) f = open(self.path, 'r', encoding='utf-8') data = f.read() self.textEdit.setText(data) self.setWindowTitle(os.path.basename(self.path) + '-Notepad') except: pass self.setCentralWidget(self.centralwidget) self.show() def closeEvent(self, event): if self.close: reply = QMessageBox.question(self, "You want to quit? ", "Task is in progress !", QMessageBox.Yes, QMessageBox.No) if reply == QMessageBox.Yes: event.accept() else: event.ignore() def resizeEvent(self, event): if self.statused.isChecked() == True: self.status() self.statusbar.setGeometry( QRect(self.geometry().x() - self.geometry().getCoords()[0], self.geometry().width(), self.geometry().width(), 20)) self.textEdit.setGeometry( QRect(self.geometry().x() - self.geometry().getCoords()[0], self.geometry().y() - self.geometry().getCoords()[1], self.geometry().width(), self.geometry().height() - 42)) else: self.textEdit.setGeometry( QRect(self.geometry().x() - self.geometry().getCoords()[0], self.geometry().y() - self.geometry().getCoords()[1], self.geometry().width(), self.geometry().height() - 21)) def check(self): if len(self.textEdit.toPlainText()) == 0: self.copys.setDisabled(True) self.cuts.setDisabled(True) self.pastes.setDisabled(True) self.deletes.setDisabled(True) self.finding.setDisabled(True) self.findnexts.setDisabled(True) else: self.finding.setDisabled(False) self.findnexts.setDisabled(False) self.copys.setDisabled(False) self.cuts.setDisabled(False) self.pastes.setDisabled(False) self.deletes.setDisabled(False) if self.statused.isChecked() == True: time = QTime.currentTime() text = time.toString("hh:mm:ss") self.time.display(text) cursor = self.textEdit.textCursor() row = cursor.blockNumber() + 1 col = cursor.columnNumber() self.label.setText("Row: " + str(row) + "| Col: " + str(col)) def status(self): if self.statused.isChecked() == True: self.statusbar = QStatusBar(self) self.statusbar.setGeometry( QRect(self.geometry().x() - self.geometry().getCoords()[0], self.geometry().width(), self.geometry().width(), 20)) self.textEdit.setGeometry( QRect(self.geometry().x() - self.geometry().getCoords()[0], self.geometry().y() - self.geometry().getCoords()[1], self.geometry().width(), self.geometry().height() - 42)) font = QFont() font.setPointSize(10) self.statusbar.setFont(font) self.label = QLabel("Row: 0 | Col: 0") self.statusbar.addPermanentWidget(self.label) self.time = QLCDNumber() self.time.setDigitCount(8) self.time.setFrameShadow(QFrame.Sunken) self.time.setFrameShape(QFrame.Panel) self.statusbar.addWidget(self.time) self.setStatusBar(self.statusbar) else: self.textEdit.setGeometry( QRect(self.geometry().x() - self.geometry().getCoords()[0], self.geometry().y() - self.geometry().getCoords()[1], self.geometry().width(), self.geometry().height() - 21)) vboxlayout = QVBoxLayout() vboxlayout.setContentsMargins(QtCore.QMargins()) vboxlayout.setSpacing(0) sizegrip = QSizeGrip(self.centralwidget) sizegrip.setVisible(True) vboxlayout.addWidget(sizegrip, 0, Qt.AlignBottom | Qt.AlignRight) self.centralwidget.setLayout(vboxlayout) self.statusbar.hide() def helps(self): QMessageBox.information(self, "Help", "This is your notepad made by PyQt5") def about(self): QMessageBox.information(self, "About", "This is the Notepad made by Yash Rajput") def files(self): self.textEdit.setText('') self.setWindowTitle("Untitled-Notepad") self.filename = ["Untitled-Notepad"] self.new = True def open(self): self.filename = QFileDialog.getOpenFileName( self, 'Open File', '\home', 'Text Files (*.txt);;All Files (*)') if self.filename[0]: f = open(self.filename[0], 'r', encoding='utf-8') try: data = f.read() self.textEdit.setText(data) self.setWindowTitle( os.path.basename(self.filename[0]) + '-Notepad') except: pass def save(self): try: if self.new == False: w = open(self.filename[0], 'w') print(self.filename[0]) w.write(self.textEdit.toPlainText()) w.close() elif self.new == True: self.saveas() except: self.saveas() def saveas(self): self.filename = QFileDialog.getSaveFileName( self, "Save as", '\home', 'Text Files(*.txt);;All Files(*)') try: f = open(self.filename[0], 'w') f.write(self.textEdit.toPlainText()) f.close() self.new = False self.setWindowTitle( os.path.basename(self.filename[0]) + '-Notepad') except: pass def exists(self): box = QMessageBox.question(self, "You want to quit? ", "Task is in progress !", QMessageBox.Yes, QMessageBox.No) if box.exec() == box.Yes: self.destroy() def undos(self): self.textEdit.undo() def cut(self): self.textEdit.cut() def copy(self): self.textEdit.copy() def paste(self): self.textEdit.paste() def select(self): self.textEdit.selectAll() def delete(self): cursor = self.textEdit.textCursor() cursor.removeSelectedText() def todaytime(self): self.textEdit.insertPlainText(str(datetime.today())) def word(self): if self.wrap.isChecked(): self.textEdit.setLineWrapMode(self.textEdit.WidgetWidth) else: self.textEdit.setLineWrapMode(self.textEdit.NoWrap) def fonts(self): font, ok = QFontDialog.getFont() if ok: self.textEdit.setFont(font) def zoomin(self): font = QFont(self.textEdit.font()) size = font.pointSize() font.setPointSize(size + 1) self.textEdit.setFont(font) def zoomout(self): font = QFont(self.textEdit.font()) size = font.pointSize() font.setPointSize(size - 1) self.textEdit.setFont(font) def restore(self): font = QFont() font.setPointSize(8) font.setFamily('Arial') self.textEdit.setFont(font) def finds(self): self.pc = Find(w) self.pc.exec() def replace(self): p = replaces(w) p.exec() def go(self): temp = Go(w) temp.exec() def prints(self): self.printer = QPrinter(QPrinter.HighResolution) dialog = QPrintDialog(self.printer, self) if dialog.exec_() == QPrintDialog.Accepted: w.textEdit.print_(self.printer) def printsetup(self): self.printer = QPrinter(QPrinter.HighResolution) dialog = QPrintPreviewDialog(self.printer, self) dialog.paintRequested.connect(self.handle_paint_request) dialog.exec_() def handle_paint_request(self, printer): self.textEdit.print(printer) def nexts(self): self.pc.click()
class MainWindow(QWidget): def __init__(self, parent=None, path_config='config.ini', path_style='./styles/style.qss', logger=None): super(MainWindow, self).__init__(parent) self.path_config = path_config self.config = Config(self.path_config) self.settings = self.config.getConfig() self.logger = logger self.drawInitialMenu(path_style) def drawInitialMenu(self, path_style='./styles/style.qss'): self.path_to_data = self.settings.get('path', 'data') self.path_to_library = self.settings.get('path', 'library') self.path_to_playlist = self.settings.get('path', 'playlist') self.path_to_database = self.settings.get('path', 'database') self.language = self.settings.get('general', 'language') self.style = self.settings.get('general', 'style') try: with open(path_style, "r") as f: stylesheet = f.read() except: stylesheet = ''' QWidget{background-color: #f0f8ff; color:#0f0f7f} QPushButton{color: #ffffff; background-color: #7070ff; border: 2px; border-radius: 5px; font-weight:bold} QPushButton:hover,QPushButton:pressed{color: #ffffff; background-color:#9f9f9f} QPushButton:disabled{color: #ffffff; background-color:#dfdfdf} QLineEdit{color:#0f0f7f; border:1px solid #a0a0a0; border-radius: 5px; background-color:#dff3ff} QLineEdit:hover{color:#0f0f7f; border:1px solid #7070ff; border-radius: 5px} QLineEdit:disabled{color:#d0d0d0; border:1px solid #d0d0d0; border-radius: 5px} QSpinBox{color:#0f0f7f; border:1px solid #a0a0a0; border-radius: 5px; background-color:#dff3ff} QSpinBox:hover{color:#0f0f7f; border:1px solid #7070ff; border-radius: 5px} QProgressBar{text-align:center; color:#7f7faf; font-weight:bold} QProgressBar::chunk{background-color: #50ff50; width: 10px; margin: 1px;} ''' self.setStyleSheet(stylesheet) if self.language == "en": self.sentences = LANG_ENG else: self.sentences = LANG_JA self.apg = APG(self.path_to_database, self.logger) self.width = int(self.settings.get('screen', 'width')) self.height = int(self.settings.get('screen', 'height')) self.label_data = QLabel(self.sentences["path_to_data"], self) self.label_data.setGeometry(self.width * 0.08, self.height * 0.10, self.width * 0.2, 30) self.label_library = QLabel(self.sentences["path_to_library"], self) self.label_library.setGeometry(self.width * 0.08, self.height * 0.20, self.width * 0.2, 30) self.label_playlist = QLabel(self.sentences["path_to_playlist"], self) self.label_playlist.setGeometry(self.width * 0.08, self.height * 0.30, self.width * 0.2, 30) self.label_advanced = QLabel(self.sentences["advanced_settings"], self) self.label_advanced.setGeometry(self.width * 0.08, self.height * 0.40, self.width * 0.22, 30) self.setFixedSize(self.width, self.height) self.button_data = QPushButton(self.sentences["select"], self) self.button_data.setObjectName('path_data') self.button_data.setGeometry(self.width * 0.78, self.height * 0.10, self.width * 0.15, 30) self.button_data.clicked.connect(self.buttonClicked) self.button_library = QPushButton(self.sentences["select"], self) self.button_library.setObjectName('path_library') self.button_library.setGeometry(self.width * 0.78, self.height * 0.20, self.width * 0.15, 30) self.button_library.clicked.connect(self.buttonClicked) self.button_playlist = QPushButton(self.sentences["select"], self) self.button_playlist.setObjectName('path_playlist') self.button_playlist.setGeometry(self.width * 0.78, self.height * 0.30, self.width * 0.15, 30) self.button_playlist.clicked.connect(self.buttonClicked) self.line_data = QLineEdit(self.path_to_data, self) self.line_data.setGeometry(self.width * 0.27, self.height * 0.10, self.width * 0.5, 30) self.line_data.setToolTip(self.sentences["tips_data"]) self.line_library = QLineEdit(self.path_to_library, self) self.line_library.setGeometry(self.width * 0.27, self.height * 0.20, self.width * 0.5, 30) self.line_library.setToolTip(self.sentences["tips_library"]) self.line_playlist = QLineEdit(self.path_to_playlist, self) self.line_playlist.setGeometry(self.width * 0.27, self.height * 0.30, self.width * 0.5, 30) self.line_playlist.setToolTip(self.sentences["tips_playlist"]) self.line_keyword = QLineEdit(self) self.line_keyword.setGeometry(self.width * 0.25, self.height * 0.55, self.width * 0.3, 30) self.line_keyword.setEnabled(False) self.line_keyword.setToolTip(self.sentences["tips_line_keyword"]) self.completer = QCompleter(self.apg.getCandidate(target="anime"), self) self.completer.setCaseSensitivity(Qt.CaseInsensitive) self.completer.setCompletionMode(QCompleter.PopupCompletion) self.completer.popup().setStyleSheet( "background-color:#3c3c3c; color:#cccccc") self.line_keyword.setCompleter(self.completer) self.logger.info("Completer was called.") self.label_category = QLabel(self.sentences["category"], self) self.label_category.setGeometry(self.width * 0.1, self.height * 0.47, self.width * 0.2, 30) self.check_anime = QCheckBox(self.sentences["anime"], self) self.check_anime.setObjectName("anime") self.check_anime.toggle() self.check_anime.setGeometry(self.width * 0.22, self.height * 0.47, self.width * 0.15, 30) self.check_anime.clicked.connect(self.checkClicked) self.check_anime.setToolTip(self.sentences["tips_cat_anime"]) self.check_game = QCheckBox(self.sentences["game"], self) self.check_game.setObjectName("game") self.check_game.toggle() self.check_game.setGeometry(self.width * 0.33, self.height * 0.47, self.width * 0.15, 30) self.check_game.clicked.connect(self.checkClicked) self.check_game.setToolTip(self.sentences["tips_cat_game"]) self.check_sf = QCheckBox(self.sentences["sf"], self) self.check_sf.setObjectName("sf") self.check_sf.toggle() self.check_sf.setGeometry(self.width * 0.44, self.height * 0.47, self.width * 0.15, 30) self.check_sf.clicked.connect(self.checkClicked) self.check_sf.setToolTip(self.sentences["tips_cat_sf"]) self.keyword = QCheckBox(self.sentences["anime_title"], self) self.keyword.setObjectName("keyword") self.keyword.setGeometry(self.width * 0.10, self.height * 0.55, self.width * 0.15, 30) self.keyword.clicked.connect(self.checkClicked) self.keyword.setToolTip(self.sentences["tips_keyword"]) # Define the push button for start the process self.run = QPushButton(self.sentences["run"], self) self.run.setObjectName('run') self.run.setGeometry(self.width * 0.35, self.height * 0.85, self.width * 0.15, 30) self.run.clicked.connect(self.buttonClicked) self.run.setEnabled(True) self.run.setToolTip(self.sentences["tips_run"]) # Define the push button for making the database self.db_update = QPushButton(self.sentences["db_update"], self) self.db_update.setObjectName('db_update') self.db_update.setGeometry(self.width * 0.75, self.height * 0.65, self.width * 0.15, 30) self.db_update.clicked.connect(self.buttonClicked) self.db_update.setEnabled(True) self.db_update.setToolTip(self.sentences["tips_database"]) # Define the push button for stop the process self.stop = QPushButton(self.sentences["stop"], self) self.stop.setObjectName('stop') self.stop.setGeometry(self.width * 0.55, self.height * 0.85, self.width * 0.15, 30) self.stop.clicked.connect(self.buttonClicked) self.stop.setEnabled(False) self.stop.setToolTip(self.sentences["tips_stop"]) # Define the progress bar self.progress = QProgressBar(self) self.progress.setGeometry(self.width * 0.55, self.height * 0.95, self.width * 0.4, 20) self.progress.setMaximum(100) # Define the status bar self.status = QStatusBar(self) self.status.setGeometry(self.width * 0.01, self.height * 0.95, self.width * 0.5, 20) self.status.showMessage(self.sentences["init"]) self.setWindowTitle('Anison Playlist Generator') self.setWindowTitle self.thread_prog = SubProgress() self.thread_prog.signal.connect(self.updateProgress) self.thread_updateDB = None self.thread_genPlaylist = None def __del__(self): self.config.saveConfig(name=self.path_config, path_library=self.path_to_library, path_data=self.path_to_data, path_playlist=self.path_to_playlist, path_database=self.path_to_database, width=800, height=480, path_style="./styles/style.qss", language=self.language) def paintEvent(self, event): self.painter = QPainter(self) self.painter.setBrush(QColor(30, 30, 30)) self.painter.setPen(QColor(160, 160, 160)) rect = QRect(int(self.width * 0.05), int(self.height * 0.43), int(self.width * 0.90), int(self.height * 0.40)) self.painter.drawRoundedRect(rect, 20.0, 20.0) self.painter.end() def updateText(self, var, folder=True, ext=".m3u"): updated_path = "" if folder: updated_path = QFileDialog.getExistingDirectory( None, 'rootpath', var.text()) else: updated_path = QFileDialog.getOpenFileName(None, 'rootpath', var.text())[0] if updated_path == "" or (os.path.isfile(updated_path) and os.path.splitext(updated_path)[1] != ext): var.setText(var.text()) else: var.setText(updated_path) return updated_path def checkClicked(self): sender = self.sender() if sender.objectName() == "keyword": if self.keyword.checkState(): self.status.showMessage(sender.text().replace(":", "") + self.sentences["enable"]) self.line_keyword.setEnabled(True) else: self.status.showMessage(sender.text().replace(":", "") + self.sentences["disable"]) self.line_keyword.setEnabled(False) elif sender.objectName() == "anime": if self.check_anime.checkState(): self.status.showMessage(self.check_anime.text() + self.sentences["enable"]) else: self.status.showMessage(self.check_anime.text() + self.sentences["disable"]) elif sender.objectName() == "game": if self.check_game.checkState(): self.status.showMessage(self.check_game.text() + self.sentences["enable"]) else: self.status.showMessage(self.check_game.text() + self.sentences["disable"]) elif sender.objectName() == "sf": if self.check_sf.checkState(): self.status.showMessage(self.check_sf.text() + self.sentences["enable"]) else: self.status.showMessage(self.check_sf.text() + self.sentences["disable"]) def buttonClicked(self): sender = self.sender() self.status.showMessage(sender.text() + self.sentences["pressed"]) if sender.objectName() == "path_data": self.path_to_data = self.updateText(self.line_data) elif sender.objectName() == "path_library": self.path_to_library = self.updateText(self.line_library) elif sender.objectName() == "path_playlist": self.path_to_playlist = self.updateText(self.line_playlist, False, ".m3u") elif sender.objectName() == "run": self.logger.info("Started to making the playlist.") # 既に実行しているスレッドがある場合は処理を中止 if self.checkThreadRunning(): self.logger.info( "GenPlaylist: The previous thread is running.") QMessageBox.warning(None, self.sentences["warn_overwrite"], "直前の処理を中断しています.", QMessageBox.Ok) return # ファイルの拡張子の確認 if os.path.splitext(self.line_playlist.text())[1] != ".m3u": self.status.showMessage(self.sentences["warn_ext"]) return # プレイリストが存在するか確認 if os.path.exists(self.line_playlist.text()): react = QMessageBox.warning( None, self.sentences["warn_overwrite"], self.sentences["message_overwrite"], QMessageBox.Yes, QMessageBox.No) if react == QMessageBox.No: self.lockInput(enabled=True) return # チェックボックスの状態の確認 check_categories = { "anison": self.check_anime.checkState(), "game": self.check_game.checkState(), "sf": self.check_sf.checkState() } # プレイリスト作成用のスレッドの呼び出し self.thread_genPlaylist = GenPlaylist( apg=self.apg, keyword=self.line_keyword.text() if self.keyword.checkState() else "", use_key=1 if self.keyword.checkState() else 0, path_playlist=self.line_playlist.text(), check_categories=check_categories) self.thread_genPlaylist.signal.connect(self.generatePlaylist) # マルチスレッドによる処理の開始 self.lockInput(enabled=False) self.thread_prog.start() self.thread_genPlaylist.start() elif sender.objectName() == "db_update": self.logger.info("Started to updating the database.") # 既に実行しているスレッドがある場合は処理を中止 if self.checkThreadRunning(): self.logger.info("UpdateDB: The previous thread is running.") QMessageBox.warning(None, self.sentences["warn_overwrite"], "直前の処理を中断中です", QMessageBox.Ok) return # データベース更新処理の確認 react = QMessageBox.warning(None, self.sentences["warn_overwrite"], "データベースを更新しますか?", QMessageBox.Yes, QMessageBox.No) # Noなら処理を中止 if react == QMessageBox.No: self.lockInput(enabled=True) return # スレッドの実行準備 self.thread_updateDB = UpdateDB( apg=self.apg, path_data=self.line_data.text(), path_library=self.line_library.text()) self.thread_updateDB.signal.connect(self.updateDB) # ボタンなどの入力が出来ないようにする self.lockInput(enabled=False) # マルチスレッドによる処理の開始 self.thread_prog.start() self.thread_updateDB.start() elif sender.objectName() == "stop": self.apg.stop() self.apg.reset() self.thread_prog.wait() self.thread_prog.quit() if self.thread_updateDB != None: self.thread_updateDB.wait() self.thread_updateDB.quit() elif self.thread_genPlaylist != None: self.thread_genPlaylist.wait() self.thread_genPlaylist.quit() self.status.showMessage(self.sentences["warn_stop"]) self.lockInput(enabled=True) def checkThreadRunning(self): """ マルチスレッド処理が行われているかを返す関数 """ check_updateDB = (self.thread_updateDB != None) and self.thread_updateDB.isRunning() check_genPlaylist = (self.thread_genPlaylist != None) and self.thread_genPlaylist.isRunning() return check_updateDB or check_genPlaylist def lockInput(self, enabled=True): """ ボタン入力などの有効/無効を切り替える関数 """ self.stop.setEnabled(not enabled) self.run.setEnabled(enabled) self.db_update.setEnabled(enabled) self.check_anime.setEnabled(enabled) self.check_game.setEnabled(enabled) self.check_sf.setEnabled(enabled) self.keyword.setEnabled(enabled) self.line_keyword.setEnabled(enabled) self.button_data.setEnabled(enabled) self.button_library.setEnabled(enabled) self.button_playlist.setEnabled(enabled) self.line_data.setEnabled(enabled) self.line_playlist.setEnabled(enabled) self.line_library.setEnabled(enabled) return def updateProgress(self, signal): """ プログレスバーの値を更新する関数 """ db, library, playlist = self.apg.getProgress() value = 0 if 0 < playlist and playlist < 100: value = playlist elif 0 < db and db < 100: value = db else: value = library self.progress.setValue(value) def resetProgress(self): """ ProgressBarの値を0にする関数 """ self.progress.setValue(0) def generatePlaylist(self, signal): """ GenPlaylistスレッド実行時に呼び出される関数 空白を受信したらスレッドを終了する """ if signal != "": self.status.showMessage(signal) else: self.apg.reset() self.thread_genPlaylist.wait() self.thread_genPlaylist.quit() self.thread_prog.wait() self.thread_prog.quit() self.resetProgress() self.lockInput(enabled=True) # メッセージの表示 self.status.showMessage(self.sentences["fin_making_playlist"]) def updateDB(self, signal): """ UpdateDBスレッド実行時に呼び出される関数 空白を受信したらスレッドを終了する """ if signal != "": self.status.showMessage(signal) else: self.apg.reset() self.thread_updateDB.wait() self.thread_updateDB.quit() self.thread_prog.wait() self.thread_prog.quit() self.resetProgress() self.lockInput(enabled=True) # 検索候補の更新 self.completer.model().setStringList( self.apg.getCandidate(target="anime")) # メッセージの表示 self.status.showMessage(self.sentences["fin_updating_database"])