from datetime import datetime from logging import error, info from PySide6.QtWidgets import QMessageBox, QWidget, QPushButton, QProgressBar, QApplication from func.utils.Constants import Constants from func.utils.CustomException import TipsTypeValueNotExistError, MsgBoxTypeValueNotExistError class PublicFunc: @staticmethod def get_current_localtime() -> str: """ 获取当前本地时间 Parameters: Returns: str,格式化为"%H:%M:%S"的当前本地时间 Raises: """ return str(datetime.now().strftime("%H:%M:%S")) @staticmethod def format_status_msg(msg) -> str: """ 格式化状态栏信息 Parameters: msg - str,需要被格式化的字符串 Returns: str,格式化为"%H:%M:%S"的当前本地时间 + 信息 Raises: """ return str(datetime.now().strftime("%H:%M:%S")) + " " + msg @staticmethod def text_output(main_window: object, content: str, tips_type: str) -> None: """ 更新textBrowser中的内容,同时输出日志 Parameters: main_window - object,Qt的含有textBrowser属性的对象,这里一般指的是mainWindow,里面有唯一的textBrowser属性 content - str,需要输出的内容 tips_type - 日志输出的类型 Returns: Raises: TipsTypeValueNotExistError """ if tips_type is Constants.TIPS_TYPE_INFO: info(f"{tips_type}: {content}") main_window.textBrowser_info.append( f"{PublicFunc.get_current_localtime()} {tips_type}: {content}") elif tips_type is Constants.TIPS_TYPE_ERROR: error(f"{tips_type}: {content}") main_window.textBrowser_info.append( f"{PublicFunc.get_current_localtime()} {tips_type}: {content}") else: raise TipsTypeValueNotExistError() main_window.textBrowser_info.verticalScrollBar().setValue( main_window.textBrowser_info.verticalScrollBar().maximum()) @staticmethod def msgbox_output(main_window: object, content: str, msg_box_type: str) -> None: """ 更新messageBox中的内容,并弹出 Parameters: main_window - object,Qt的含有messageBox属性的对象,这里一般指的是mainWindow,里面有唯一的messageBox属性 content - str,需要输出的内容 msg_box_type - str,messageBox弹窗的类型 Returns: Raises: MsgBoxTypeValueNotExistError """ main_window.msgBox.setText(f"{msg_box_type}: {content}") if msg_box_type is Constants.MSGBOX_TYPE_INFO: main_window.msgBox.setIcon(QMessageBox.Information) elif msg_box_type is Constants.MSGBOX_TYPE_WARNING: main_window.msgBox.setIcon(QMessageBox.Warning) elif msg_box_type is Constants.MSGBOX_TYPE_ERROR: main_window.msgBox.setIcon(QMessageBox.Critical) elif msg_box_type is Constants.MSGBOX_TYPE_QUESTION: main_window.msgBox.setIcon(QMessageBox.Question) else: raise MsgBoxTypeValueNotExistError() main_window.msgBox.exec() @staticmethod def __disableAllButton__(mainWindow, buttonState): # 禁用所有按钮 all_widgets = mainWindow.centralWidget().findChildren(QWidget) # 迭代所有部件,查找按钮并禁用它们 for widget in all_widgets: if isinstance(widget, QPushButton): if widget.objectName() in buttonState["Current"].keys(): widget.setEnabled(False) @staticmethod def __enableAllButton__(mainWindow, buttonState): # 启用按钮 all_widgets = mainWindow.centralWidget().findChildren(QWidget) # 迭代所有部件,查找按钮并启用它们 for widget in all_widgets: if isinstance(widget, QPushButton): if widget.objectName() in buttonState["Current"].keys(): widget.setEnabled(buttonState["Current"][widget.objectName()]) @staticmethod def __resetAllButton__(mainWindow, buttonState): # 启用按钮 all_widgets = mainWindow.centralWidget().findChildren(QWidget) # 迭代所有部件,查找按钮并启用它们 for widget in all_widgets: if isinstance(widget, QPushButton): if widget.objectName() in buttonState["Default"].keys(): widget.setEnabled(buttonState["Default"][widget.objectName()]) @staticmethod def add_progressbar(mainWindow): mainWindow.progressbar = QProgressBar() mainWindow.progressbar.setRange(0, 100) mainWindow.progressbar.setValue(0) mainWindow.progressbar.setStyleSheet(Constants.PROGRESSBAR_STYLE) mainWindow.ui.statusbar.addPermanentWidget(mainWindow.progressbar) @staticmethod def statusbar_show_msg(mainWindow, msg): mainWindow.ui.statusbar.showMessage(msg) @staticmethod def statusbar_clear_msg(mainWindow): mainWindow.ui.statusbar.clearMessage() @staticmethod def finish_operation(mainWindow, buttonState): PublicFunc.statusbar_show_msg(mainWindow, PublicFunc.format_status_msg(Constants.OPERATION_FINISHED)) mainWindow.progressbar.setValue(100) QApplication.processEvents() PublicFunc.__enableAllButton__(mainWindow, buttonState)