From 346befda6d62ef584e859ba04242d3626bda365f Mon Sep 17 00:00:00 2001 From: Yaronzz Date: Fri, 8 Jul 2022 09:59:48 +0800 Subject: [PATCH] update gui --- TIDALDL-PY/tidal_dl/gui.py | 73 ++++++++++++++++++++++++++------------ 1 file changed, 50 insertions(+), 23 deletions(-) diff --git a/TIDALDL-PY/tidal_dl/gui.py b/TIDALDL-PY/tidal_dl/gui.py index 099a1d7..beb8f82 100644 --- a/TIDALDL-PY/tidal_dl/gui.py +++ b/TIDALDL-PY/tidal_dl/gui.py @@ -9,6 +9,7 @@ @Desc : """ import sys +import aigpy import _thread import importlib @@ -16,35 +17,51 @@ from tidal_dl.events import * from tidal_dl.settings import * from tidal_dl.printf import * -enableGui = False -try: - params = importlib.import_module('PyQt5') - params = importlib.import_module('qt_material') - enableGui = True -except Exception as e: - pass -if enableGui: - from PyQt5.QtCore import Qt +def enableGui(): + try: + importlib.import_module('PyQt5') + importlib.import_module('qt_material') + return True + except Exception as e: + return False + + +if not enableGui(): + def startGui(): + Printf.err("Not support gui. Please type: `pip3 install PyQt5 qt_material`") +else: + from PyQt5.QtCore import Qt, QObject + from PyQt5.QtGui import QTextCursor from PyQt5.QtCore import pyqtSignal from PyQt5 import QtWidgets from qt_material import apply_stylesheet + class EmittingStream(QObject): + textWritten = pyqtSignal(str) + + def write(self, text): + self.textWritten.emit(str(text)) + class MainView(QtWidgets.QWidget): s_downloadEnd = pyqtSignal(str, bool, str) def __init__(self, ) -> None: super().__init__() self.initView() - self.setMinimumSize(600, 500) + self.setMinimumSize(600, 620) self.setWindowTitle("Tidal-dl") - + def __info__(self, msg): - QtWidgets.QMessageBox.information(self, - 'Info', - msg, - QtWidgets.QMessageBox.Yes) - + QtWidgets.QMessageBox.information(self, 'Info', msg, QtWidgets.QMessageBox.Yes) + + def __output__(self, text): + cursor = self.c_printTextEdit.textCursor() + cursor.movePosition(QTextCursor.End) + cursor.insertText(text) + self.c_printTextEdit.setTextCursor(cursor) + self.c_printTextEdit.ensureCursorVisible() + def initView(self): self.c_lineSearch = QtWidgets.QLineEdit() self.c_btnSearch = QtWidgets.QPushButton("Search") @@ -55,6 +72,7 @@ if enableGui: for item in self.m_supportType: self.c_combType.addItem(item.name, item) + # init table columnNames = ['#', 'Title', 'Artists', 'Quality'] self.c_tableInfo = QtWidgets.QTableWidget() self.c_tableInfo.setColumnCount(len(columnNames)) @@ -71,6 +89,14 @@ if enableGui: item = QtWidgets.QTableWidgetItem(name) self.c_tableInfo.setHorizontalHeaderItem(index, item) + # print + self.c_printTextEdit = QtWidgets.QTextEdit() + self.c_printTextEdit.setReadOnly(True) + self.c_printTextEdit.setFixedHeight(150) + sys.stdout = EmittingStream(textWritten=self.__output__) + sys.stderr = EmittingStream(textWritten=self.__output__) + + # layout self.lineGrid = QtWidgets.QHBoxLayout() self.lineGrid.addWidget(self.c_combType) self.lineGrid.addWidget(self.c_lineSearch) @@ -80,7 +106,9 @@ if enableGui: self.mainGrid.addLayout(self.lineGrid) self.mainGrid.addWidget(self.c_tableInfo) self.mainGrid.addWidget(self.c_btnDownload) + self.mainGrid.addWidget(self.c_printTextEdit) + # connect self.c_btnSearch.clicked.connect(self.search) self.c_btnDownload.clicked.connect(self.download) self.s_downloadEnd.connect(self.downloadEnd) @@ -92,7 +120,7 @@ if enableGui: def search(self): self.c_tableInfo.setRowCount(0) - + self.s_type = self.c_combType.currentData() self.s_text = self.c_lineSearch.text() if self.s_text.startswith('http'): @@ -103,7 +131,7 @@ if enableGui: elif tmpType not in self.m_supportType: self.__info__(f'Type[{tmpType.name}] not support!') return - + tmpData = TIDAL_API.getTypeData(tmpId, tmpType) if tmpData is None: self.__info__('Url is wrong!') @@ -115,7 +143,7 @@ if enableGui: else: self.s_result = TIDAL_API.search(self.s_text, self.s_type) self.s_array = TIDAL_API.getSearchResultItems(self.s_result, self.s_type) - + if len(self.s_array) <= 0: self.__info__('No result!') return @@ -170,8 +198,9 @@ if enableGui: if not loginByConfig(): self.__info__('Login failed. Please log in using the command line first.') - def startGui(): + aigpy.cmd.enableColor(False) + app = QtWidgets.QApplication(sys.argv) apply_stylesheet(app, theme='dark_blue.xml') @@ -180,9 +209,7 @@ if enableGui: window.checkLogin() app.exec_() -else: - def startGui(): - Printf.err("Not support gui. Please type: `pip3 install PyQt5 qt_material`") + if __name__ == '__main__': SETTINGS.read(getProfilePath())