给我一个网站如何建立一个网站链接把文件信息存里

张小明 2026/1/1 9:52:38
给我一个网站,如何建立一个网站链接把文件信息存里,临海市网站建设,玩具网站建设服务公司在我们实际开发项目的时候#xff0c;有时候为了使用方便#xff0c;会针对一些常用到的内容进行一定的封装处理#xff0c;以降低使用的难度和减少相关代码#xff0c;本篇随笔介绍在PySide6/PyQt6的项目中封装一些基础类库#xff0c;包括文件对话框、字体对话框、颜色对…在我们实际开发项目的时候有时候为了使用方便会针对一些常用到的内容进行一定的封装处理以降低使用的难度和减少相关代码本篇随笔介绍在PySide6/PyQt6的项目中封装一些基础类库包括文件对话框、字体对话框、颜色对话框、消息对话框等内容。1、常用对话框处理封装的优点对常用对话框的调用包括文件对话框、字体对话框、颜色对话框、消息对话框等内容可能调用的时候会遇到一些问题如对于常用的文件目录对话框可能会出现下面一些问题参数顺序难记单选 / 多选 / 保存 / 目录 API 不统一最近路径不好维护每个窗口都写一遍如果对它进行一定的封装可以实现更多可选参数的设置以及更好的支持✅ 打开单文件✅ 打开多文件✅ 保存文件✅ 选择目录✅ 文件过滤器常量✅ 最近目录记忆进程级 / 可扩展到配置✅ Windows / macOS / Linux 兼容如果对这些对话框进行辅助类的统一封装会具有以下是一些主要的优点1代码复用封装常用对话框可以避免重复代码。你可以定义一个统一的函数或类来处理所有常用对话框操作从而在多个地方复用这段代码。2一致性通过封装你可以确保所有常用对话框的外观和行为一致。这有助于提高用户体验使用户在应用程序中获得统一的交互方式。3简化调用封装可以简化调用过程。你可以将常用的参数设置如标题、图标、按钮类型等预先定义好从而在调用时减少参数输入。4易于维护当需要更改对话框的行为或样式时只需在封装函数中进行修改而不必在应用程序中的每个调用点进行更改。这使得维护变得更加简单和高效。5增强可读性通过使用封装的函数或类代码变得更易读。其他开发者可以一眼看出对话框的作用而不必深入了解其具体实现。6集中管理封装有助于集中管理对话框的逻辑比如处理用户输入、响应用户选择等。这样可以更方便地进行逻辑更新或错误处理。7扩展性如果将来需要增加新的对话框或修改现有对话框的逻辑封装使得扩展更加容易。你可以在封装的基础上进行扩展而不影响现有的代码结构。2、文件对话框的封装如果我们对文件对话框进行封装那么需要考虑打开、保存文件对话框等常规操作而文件的格式有多种多样我们为了方便可以提供更细节的函数选择具体的文件如文本文件、Excel文件等。classFileDialogUtil:文件、目录对话框工具类#定义文件过滤器all_filter All File (*.*);;*.*word_filterWord (*.doc);;*.doc;;Word (*.docx);;*.docx;;All File (*.*);;*.*excel_filterExcel (*.xls);;*.xls;;Excel (*.xlsx);;*.xlsx;;All File (*.*);;*.*pdf_filterPDF (*.pdf);;*.pdf;;All File (*.*);;*.*image_filterImage Files (*.BMP;*.bmp;*.JPG;*.jpg;*.GIF;*.gif;*.png;*.PNG);;*.BMP;*.bmp;*.JPG;*.jpg;*.GIF;*.gif;*.png;*.PNG;;All File (*.*);;*.*html_filterHTML files (*.html;*.htm);;*.html;*.htm;;All files (*.*);;*.*access_filterAccess (*.mdb);;*.mdb;;All File (*.*);;*.*zip_filterZip (*.zip);;*.zip;;Rar (*.rar);;*.rar;;All files (*.*);;*.*config_filterConfiguration Files (*.cfg);;*.cfg;;All File (*.*);;*.*txt_filterText (*.txt);;*.txt;;All files (*.*);;*.*xml_filterXML Files (*.xml);;*.xml;;All files (*.*);;*.*rar_filterRar (*.rar);;*.rar;;All files (*.*);;*.*sqlite_filterSqlite Files (*.db);;*.db;;All files (*.*);;*.*python_filterPython Files (*.py);;*.py;;All files (*.*);;*.*csv_filterCSV Files (*.csv);;*.csv;;All files (*.*);;*.*staticmethoddefopen_file( parent: QWidgetNone, multiple: boolFalse, title: str打开文件, filter: strall_filter, filename: str, initial_directory: stros.getcwd(), )-str:打开文件对话框 :param parent: 父窗口 :param multiple: 是否多选 :param title: 对话框标题 :param filename: 默认文件名 :param filter: 文件过滤器 :param initial_directory: 默认目录 :return: 选中的文件路径,如果是多选,则返回以逗号分隔的多个文件路径#创建文件对话框dialog QFileDialog(parent) dialog.setWindowTitle(title) dialog.setFileMode( QFileDialog.FileMode.ExistingFilesifmultipleelseQFileDialog.FileMode.ExistingFile ) dialog.setNameFilter(filter) dialog.setDirectory(initial_directory) dialog.selectFile(filename)#执行对话框并获取文件路径result ifdialog.exec():ifmultiple: file_pathsdialog.selectedFiles() result,.join(file_paths)#将文件路径连接成一个字符串else: result dialog.selectedFiles()[0]#获取单个文件路径returnresult当然上面open_file传入的是所有文件的格式如果我们需要跟进一步选择Excel格式就需要传入对应的后缀名参数常量即可。如下所示。而如果要弹出保存文件对话框的操作那么我们也是如法炮制即可。staticmethoddefsave_file( parent: QWidgetNone, title: str保存文件, filter: strall_filter, filename: str, initial_directory: stros.getcwd(), )-str:以指定的标题弹出保存文件对话框 :param title: 对话框标题 :param filename: 默认文件名 :param filter: 文件过滤器 :param initial_directory: 默认目录 :return: 选中的文件路径#创建保存文件对话框dialog QFileDialog(parent) dialog.setWindowTitle(title) dialog.setAcceptMode(QFileDialog.AcceptMode.AcceptSave)#设置为保存模式dialog.setNameFilter(filter) dialog.setDirectory(initial_directory) dialog.selectFile(filename)#执行对话框并获取文件路径result ifdialog.exec(): result dialog.selectedFiles()[0]#获取选中的文件路径returnresult其他类型格式的只需要传入对应的filter格式即可。选择目录也是类似的处理staticmethoddefopen_dir( parent: QWidgetNone, title: str选择目录, initial_directory: stros.getcwd(), )-str:显示目录选择对话框#创建文件对话框dialog QFileDialog(parent) dialog.setWindowTitle(title) dialog.setFileMode(QFileDialog.FileMode.Directory)#设置为目录选择模式dialog.setOption(QFileDialog.Option.ShowDirsOnly, True)#只显示目录dialog.setDirectory(initial_directory)#执行对话框并获取选中的目录result ifdialog.exec(): result dialog.selectedFiles()[0]#获取选中的目录路径print(result)returnresult选择多个目录如下效果这样我们在一些窗体上使用保存Excel或者PDF文件的时候直接使用它的函数调用即可比较简单了。defexport_to_pdf(self, setting: PrintSetting) -str:将 QTableView 的数据导出为 PDF, 成功返回文件路径失败返回空字符串pdf_fileFileDialogUtil.save_pdf(filenamef{setting.print_title}.pdf)ifnotpdf_file:return#创建 QPrinterPDF格式printer QPrinter(QPrinter.PrinterMode.HighResolution) printer.setOutputFormat(QPrinter.OutputFormat.PdfFormat) printer.setOutputFileName(pdf_file)#输出 PDF 文件#打印的处理printer.setPageSize(setting.page_size) printer.setPageOrientation(setting.page_orientation) self.print_cols setting.print_cols#打印指定列的索引列表self.print_title setting.print_title#打印标题self.settings setting#保存打印设置#打印输出self.print_preview_paint(printer)returnpdf_file3、封装常用消息对话框封装的消息提示对话框包括个各种常用的对话框如下所示首先我们需要定义一个独立的消息对话框类MessageUtil如下所示。classMessageUtil:封装了常用的消息对话框以方便使用常用对话框消息。 包括提示信息、警告信息、错误信息、确认信息、询问信息、输入信息、 选择信息、多选信息、文件选择信息、目录选择信息、字体选择信息、颜色选择信息、进度条信息等。#常用消息对话框的标题CAPTION_TIPS 提示信息CAPTION_WARNING警告信息CAPTION_ERROR错误信息CAPTION_CONFIRM确认信息staticmethoddefshow_message( message: str, title: strCAPTION_TIPS, extended_messageNone, parentNone, icon: QMessageBox.IconQMessageBox.Icon.Information, buttons: QMessageBox.StandardButtonQMessageBox.StandardButton.Ok, )-QMessageBox.StandardButton:通用消息框显示函数msg_boxQMessageBox(parent) msg_box.setWindowTitle(title) msg_box.setText(message)#设置详细信息在消息框的底部显示。ifextended_message:#创建 TextSplitter 实例设置每行最大字符数为 30splitter TextSplitter(max_line_length80)#使用 splitter 来分割文本extended_message splitter.split(extended_message) msg_box.setDetailedText(extended_message) msg_box.setDetailedText(extended_message) msg_box.setIcon(icon) msg_box.setStandardButtons(buttons)#设置窗口图标app_icon QIcon(app/images/app.ico) msg_box.setWindowIcon(app_icon)returnmsg_box.exec()然后统一对常用的消息进行函数封装如一般消息、警告消息、错误消息提示消息等只需要对上面函数的简单调用传递不同的参数就可以。有了这样的封装我们可以在窗体中直接调用不需要记住太多的参数了比较简单如下面的删除操作处理。asyncSlot() asyncdefOnDelete(self):弹出删除对话框selected_rowsself.table_view.selectionModel().selectedRows()ifnotselected_rows:MessageUtil.show_info(请选择要操作的行)return#确认删除result MessageUtil.show_confirm(确认删除选中的行,确认删除)ifresult:#遍历选定的行删除主键值对应的记录list []forindexinselected_rows: entity_idself.table_model.GetPrimaryKeyValue(index.row())ifentity_id: list.append(entity_id)try: await self.OnDeleteByIdList(list)exceptException as e:MessageUtil.show_error(f删除失败{e})为了了解常用对话框的操作我们还编写一个简单的测试界面来展示效果。字体对话框封装字体对话框函数如下staticmethoddefshow_font_dialog(parentNone, fontNone) -tuple[QFont, bool]:显示字体选择对话框 :param parent: 父窗口 :param font: 默认字体如果没有提供使用系统默认字体 :return: 选择的字体成功时返回 (QFont, True)失败时返回 (None, False)#如果没有提供默认字体则使用系统默认字体iffontisNone: font QApplication.font()#获取系统默认字体#打开字体选择对话框ok, selected_font QFontDialog.getFont(font, parent)#返回选择的字体和是否成功returnselected_font, ok调用代码如下所示。defon_select_font(self): myfont self.message.font()#获取当前字体font_data MessageUtil.show_font_dialog(self, myfont)[0]#打开字体选择对话框iffont_data: self.message.setFont( QFont(font_data.family(), font_data.pointSize()) )#设置字体self.message.update()#刷新显示颜色对话框封装颜色对话框函数如下defshow_colour_dialog(parentNone, colourNone) -tuple[QColor, bool]:显示颜色选择对话框 :param parent: 父窗口 :param colour: 默认颜色如果没有提供使用黑色 :return: 选择的颜色成功时返回 (QColor, True)失败时返回 (None, False)#如果没有提供默认颜色则使用黑色ifcolourisNone: colourQColor(Qt.GlobalColor.black)#打开颜色选择对话框selected_colour QColorDialog.getColor(colour, parent)#返回选择的颜色和是否成功returnselected_colour, selected_colour.isValid()调用代码如下所示。defon_select_colour(self):colorself.message.palette().color(QPalette.ColorRole.WindowText) color_dataMessageUtil.show_colour_dialog(self, color)[0]ifcolor_data: self.message.setStyleSheet(fcolor: {color_data.name()};) self.message.update()#刷新显示通过上面的简单封装我们就可以很容易的记得相关的处理函数并且尽可能的减少了相关的参数传递这样我们在使用的时候更加方便灵活了。专注于代码生成工具、.Net/Python 框架架构及软件开发以及各种Vue.js的前端技术应用。著有Winform开发框架/混合式开发框架、微信开发框架、Bootstrap开发框架、ABP开发框架、SqlSugar开发框架、Python开发框架等框架产品。转载请注明出处撰写人伍华聪 http://www.iqidi.com
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

黄江仿做网站旅游网站首页模板下载

长距离UART通信实战指南:工业现场信号完整性的破局之道你有没有遇到过这样的场景?一台PLC通过串口与几百米外的温湿度传感器通信,白天运行正常,一到雷雨天就频繁丢包;或者多个设备挂在同一根RS-485总线上,近…

张小明 2026/1/1 9:52:37 网站建设

洋桥网站建设公司网站动态效果怎么做

工业控制电路设计的“隐形基石”:Altium Designer元件库实战全解在工业自动化现场,一台PLC突然宕机,排查数小时后发现原因竟是一颗光耦的爬电距离不足——而这颗元器件的封装模型,正是从某个“免费下载”的Altium元件库中直接调用…

张小明 2026/1/1 9:52:03 网站建设

网站建设开什么名目自己做网站犯法吗

Miniconda环境变量CONDA_DEFAULT_ENV用途 在现代AI与数据科学项目中,开发者常常面临一个看似简单却极易引发严重问题的挑战:如何准确判断当前运行的是哪个Python环境?你有没有遇到过这样的情况——脚本在本地测试正常,部署到服务器…

张小明 2026/1/1 9:51:28 网站建设

亿级流量网站架构网站开发需求分析参考文献

AutoGPT微服务架构设计建议生成 在企业智能化浪潮席卷各行各业的今天,一个现实问题日益凸显:我们拥有强大的大模型,也部署了各类自动化工具,但如何让它们真正“自主协同”,像人类员工一样理解目标、拆解任务并持续执行…

张小明 2026/1/1 9:50:55 网站建设

企业网站域名注册查询做拍拍拍拍网站

告别图表焦虑:Charticulator三步法打造专业级数据可视化 【免费下载链接】charticulator Interactive Layout-Aware Construction of Bespoke Charts 项目地址: https://gitcode.com/gh_mirrors/ch/charticulator 还在为制作复杂的业务图表而头疼吗&#xff…

张小明 2026/1/1 9:50:21 网站建设

wordpress默认字体改黑色广东网络seo推广

还在为繁琐的CAD建模步骤而苦恼吗?想象一下,只需要几句话就能让计算机帮你完成专业级的三维设计。这不是科幻电影,而是Zoo Text-to-CAD为你带来的现实体验——将创意直接转化为工程图纸的智能助手。 【免费下载链接】text-to-cad-ui A lightw…

张小明 2026/1/1 9:49:47 网站建设