Python中的PYQT5
文件转换及程序封装命令
& .\.venv\Scripts\activate
pyrcc5 D:\Kostal\Personality\ExtendItems\ExcelFilter\QtResource\Icon.qrc -o D:\Kostal\Personality\ExtendItems\ExcelFilter\QtResource\Icon_rc.py
pyuic5 -x Maincode\ExcelFilter.ui -o Maincode\ExcelFilter_UI.py
pyuic5 -x Functions\CustomerReportGenerate_UI.ui -o Functions\CustomerReportGenerate_UI.py
pyinstaller -F -w -i D:\Kostal\Personality\ExtendItems\ExcelFilter\QtResource\file_excel.ico D:\Kostal\Personality\ExtendItems\ExcelFilter\MainCode\ExcelFilter.py
设置UI窗口的自适应
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps, True)
QtGui.QGuiApplication.setAttribute(QtCore.Qt.HighDpiScaleFactorRoundingPolicy.PassThrough) #保证相对大小
Qt控件
UI运行demo
#处理分辨率的问题
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps, True)
QtGui.QGuiApplication.setAttribute(QtCore.Qt.HighDpiScaleFactorRoundingPolicy.PassThrough) #保证相对大小
#设置全局异常钩子
package_sys.excepthook = Func_SysExceptionHook
app = QtWidgets.QApplication(package_sys.argv)
Form = QtWidgets.QWidget()
ui = ExcelFilter_UI.Ui_Form()
ui.setupUi(Form)
slotFunc = Ui_SlotFunction() # 创建相关的槽函数
#按钮控件
ui.pushButton.clicked.connect(lambda:slotFunc.Func_GetExcelPath(ui))
ui.pushButton_2.clicked.connect(lambda:slotFunc.Func_GetLineYaml(ui))
ui.pushButton_3.clicked.connect(lambda:slotFunc.Func_GetColumnYaml(ui))
ui.pushButton_4.clicked.connect(slotFunc.Func_ExcelFilter)
#文本编辑控件
ui.lineEdit_5.textChanged.connect(slotFunc.Func_TextGet_DestSheetName)
ui.lineEdit_4.textChanged.connect(slotFunc.Func_TextGet_NewSheetName)
#勾选框控件
ui.checkBox.clicked.connect(slotFunc.Func_IntegerGet_ColumnPriority)
# text browser窗口-重定向到print函数
package_sys.stdout = TextBrowserStream(ui.textBrowser)
#设置窗口名称并显示
Form.setWindowTitle("Excel Filter V1.0")
Form.adjustSize()
if package_sys.platform.startswith('win'):
app.setStyle(QtWidgets.QStyleFactory.create('fusion'))
Form.show()
package_sys.exit(app.exec_())
TextBrowserStream
class TextBrowserStream(QtCore.QTextStream):
def __init__(self, textBrowser):
super().__init__()
self.textBrowser = textBrowser
#输出重定向
def write(self, s):
self.textBrowser.moveCursor(QtGui.QTextCursor.End)
self.textBrowser.insertPlainText(s)
self.textBrowser.ensureCursorVisible()
QtWidgets.QApplication.processEvents() #必须加上这一句才能实现逐步写入
if __name__ == "__main__":
sys.stdout = TextBrowserStream(ui.textBrowser)
错误提示
raise错误后会自动弹窗
ERROR_DIALOG = None
def Func_SysExceptionHook(exc_type, exc_value, exc_traceback):
import traceback
global ERROR_DIALOG
"""全局异常处理函数"""
# traceback.print_exception(exc_type, exc_value, exc_traceback) 不显示堆栈信息
error_msg = f"错误类型: {exc_type.__name__}\n错误信息: {str(exc_value)}"
# 复用或创建对话框
if ERROR_DIALOG is None:
ERROR_DIALOG = QtWidgets.QMessageBox()
ERROR_DIALOG.setWindowTitle("程序错误")
ERROR_DIALOG.setIcon(QtWidgets.QMessageBox.Critical)
ERROR_DIALOG.setStandardButtons(QtWidgets.QMessageBox.Ok)
ERROR_DIALOG.setText(error_msg)
ERROR_DIALOG.show() # 非模态显示
if __name__ == "__main__":
package_sys.excepthook = Func_SysExceptionHook
本文来自博客园,作者:{张一默},转载请注明原文链接:https://www.cnblogs.com/YiMo9929/p/18982063

浙公网安备 33010602011771号