使用wxpython开发跨平台桌面应用,对常用消息对话框的封装处置惩罚 ...

打印 上一主题 下一主题

主题 812|帖子 812|积分 2436

在很多程序中,封装常用消息对话框有很多利益,尤其是在 GUI 应用程序中,本篇随笔联合.net 开发Winform界面的经验,对使用wxpython开发中 wx.MessageDialog 和 wx.lib.agw.genericmessagedialog.GenericMessageDialog 两种不同消息对话框的处置惩罚,对其举行简朴封装,以适应程序开发的必要。
1、消息对话框的封装处置惩罚的优势

对常用消息对话框的封装处置惩罚,具有以下是一些重要的优点:
1. 代码复用

封装消息对话框可以制止重复代码。你可以定义一个统一的函数或类来处置惩罚所有消息对话框,从而在多个地方复用这段代码。
2. 一致性

通过封装,你可以确保所有消息对话框的表面和行为一致。这有助于进步用户体验,使用户在应用程序中获得统一的交互方式。
3. 简化调用

封装可以简化调用过程。你可以将常用的参数设置(如标题、图标、按钮范例等)预先定义好,从而在调用时减少参数输入。
4. 易于维护

当必要更改对话框的行为或样式时,只需在封装函数中举行修改,而不必在应用程序中的每个调用点举行更改。这使得维护变得更加简朴和高效。
5. 增强可读性

通过使用封装的函数或类,代码变得更易读。其他开发者可以一眼看出对话框的作用,而不必深入了解其具体实现。
6. 集中管理

封装有助于集中管理对话框的逻辑,比如处置惩罚用户输入、响应用户选择等。如许可以更方便地举行逻辑更新或错误处置惩罚。
7. 扩展性

假如将来必要增加新的对话框或修改现有对话框的逻辑,封装使得扩展更加轻易。你可以在封装的底子上举行扩展,而不影响现有的代码结构。
 
我在早期开发Winform的时间,对消息对话框举行了一些简朴的封装,在随笔《厚积薄发,丰富的公用类库积聚,助你高效举行系统开发(2)----常用操作 》中有先容。
封装的消息提示对话框包括个各种常用的对话框,如下所示:

 
2、对使用wxpython开发中常用消息对话框的封装

为了方便,我们先写一个页面来测试相关消息对话框的封装处置惩罚,如下界面所示。

wxpython开发中 wx.MessageDialog 和 wx.lib.agw.genericmessagedialog.GenericMessageDialog 都时跨平台支持的,GenericMessageDialog 是 wxPython 的一个扩展库,提供了一个通用的消息对话框类,用于在不同平台上表现消息框。这个类是跨平台的,支持以下重要平台:

  • Windows:在 Windows 操作系统上,GenericMessageDialog 会使用系统样式来渲染对话框。
  • macOS:在 macOS 上,它会遵循 Cocoa 的界面风格。
  • Linux:在各种 Linux 发行版上,它会适应 GTK 或 Qt(假如 wxPython 是基于这些库构建的)风格。
MessageDialog  和 GenericMessageDialog 旨在提供一致的用户体验,无论在哪个平台上运行。
MessageDialog和GenericMessageDialog 的差别:wx.MessageDialog 和 wx.lib.agw.genericmessagedialog.GenericMessageDialog 是 wxPython 中用于表现消息对话框的两种不同类,它们之间有一些重要的差别:
1) 种别及实现方式


  • wx.MessageDialog:

    • 是 wxPython 的内置类,使用系统原生的对话框实现。
    • 适应系统的表面和风格,因此在不同平台上看起来会有所不同。
    • 通常用于表现简朴的消息、确认或告诫对话框。

  • wx.lib.agw.genericmessagedialog.GenericMessageDialog:

    • 是 wxPython 的 AGW(Advanced Generic Widgets)库中的一部分,提供了一个更灵活的通用消息对话框实现。
    • 允许更多的自定义选项和更复杂的结构,恰当必要更多控制和自定义的场景。
    • 可以在所有平台上保持一致的表面,因为它不依赖于系统原生对话框。

2)自定义能力


  • wx.MessageDialog:

    • 自定义选项有限,重要集中在按钮、图标和消息文本。
    • 不支持复杂的结构或多种控件的组合。

  • wx.lib.agw.genericmessagedialog.GenericMessageDialog:

    • 提供更多的自定义选项,如设置按钮图标、对话框的最小尺寸和结构。
    • 可以添加更多控件(如文本框、图片等),恰当更复杂的用户交互需求。

3) 使用场景


  • wx.MessageDialog:

    • 适用于简朴的确认消息、告诫或信息提示场景。
    • 更恰当于必要快速实现尺度对话框的环境。

  • wx.lib.agw.genericmessagedialog.GenericMessageDialog:

    • 更恰当于必要更高自定义和灵活性的应用程序。
    • 适用于复杂的对话框场景,比如必要表现额外信息或允许用户输入的环境。

假如你的需求简朴,只需表现消息并获取用户确认,使用 wx.MessageDialog 是更简朴的选择。
假如你必要更多的自定义功能或希望在多个平台上保持一致的表面,可以考虑使用 GenericMessageDialog。
消息对话框的常用代码如下所示。
  1.     def ShowMessageDialog(self):
  2.         # 创建消息对话框
  3.         dlg = wx.MessageDialog(self,
  4.                                 "This is a message dialog example.\nWould you like to proceed?",
  5.                                 "Confirmation",
  6.                                 wx.YES_NO | wx.CANCEL | wx.ICON_QUESTION)
  7.         # 显示对话框并处理用户选择
  8.         result = dlg.ShowModal()
  9.         if result == wx.ID_YES:
  10.             wx.MessageBox("You clicked Yes!", "Info")
  11.         elif result == wx.ID_NO:
  12.             wx.MessageBox("You clicked No!", "Info")
  13.         elif result == wx.ID_CANCEL:
  14.             wx.MessageBox("You clicked Cancel!", "Info")
  15.         dlg.Destroy()  # 销毁对话框
复制代码
以及
  1.     def on_show_dialog(self, event):
  2.         # 创建 GenericMessageDialog
  3.         dlg = GMD.GenericMessageDialog(self,
  4.                                        "This is a message.",
  5.                                        "Message Title",
  6.                                        style=wx.OK | wx.CANCEL)
  7.         # 设置图标(可选)
  8.         dlg.SetYesNoCancelBitmaps(wx.ArtProvider.GetBitmap(wx.ART_INFORMATION, wx.ART_MESSAGE_BOX))
  9.         # 显示对话框
  10.         result = dlg.ShowModal()
  11.         if result == wx.ID_OK:
  12.             print("OK button clicked")
  13.         elif result == wx.ID_CANCEL:
  14.             print("Cancel button clicked")
  15.         dlg.Destroy()
复制代码
假如每次如许调用,我们必要了解很多相关的参数信息,一样平常我们只必要传入一些简朴的信息提示即可,因此必要对它们举行简朴的封装。
 我们定义一个类,提供最原始简朴的表现消息的处置惩罚函数,然后再在底子上举行特别的简化封装即可。
  1. class MessageUtil:
  2.     """
  3.     封装了常用的消息对话框,以方便使用常用对话框消息。
  4.     包括提示信息、警告信息、错误信息、确认信息、询问信息、输入信息、
  5.     选择信息、多选信息、文件选择信息、目录选择信息、字体选择信息、颜色选择信息、进度条信息等。
  6.     """
  7.     @staticmethod
  8.     def show_message(parent, message, caption, style):
  9.         """显示消息对话框-使用GenericMessageDialog实现"""
  10.         dlg = GMD.GenericMessageDialog(parent, message, caption, style)
  11.         dlg.SetIcon(images.appIcon.GetIcon())  # 设置窗口图标
  12.         result = dlg.ShowModal()
  13.         dlg.Destroy()
  14.         return result
  15.     @staticmethod
  16.     def show_message2(parent, message, caption, style):
  17.         """显示消息对话框-使用wx.MessageDialog 实现"""
  18.         dlg = wx.MessageDialog(parent, message, caption, style)
  19.         result = dlg.ShowModal()
  20.         dlg.Destroy()
  21.         return result
复制代码
其中 show_message 和show_message2 是针对两者不同消息类的封装,我们可以根据实际必要替换来用即可。如对于常规的提示消息、告警、错误消息框,简朴设置一下参数即可。
  1.     # 常用消息对话框的标题
  2.     CAPTION_TIPS = "提示信息"
  3.     CAPTION_WARNING = "警告信息"
  4.     CAPTION_ERROR = "错误信息"
  5.     CAPTION_CONFIRM = "确认信息"
  6.    
  7.     @staticmethod
  8.     def show_tips(parent, message, caption=CAPTION_TIPS):
  9.         """显示一般的提示信息"""
  10.         return MessageUtil.show_message(
  11.             parent, message, caption, wx.OK | wx.ICON_INFORMATION
  12.         )
  13.     @staticmethod
  14.     def show_warning(parent, message, caption=CAPTION_WARNING):
  15.         """显示警告信息"""
  16.         return MessageUtil.show_message(
  17.             parent, message, caption, wx.OK | wx.ICON_WARNING
  18.         )
  19.     @staticmethod
  20.     def show_error(parent, message, caption=CAPTION_ERROR):
  21.         """显示错误信息"""
  22.         return MessageUtil.show_message(parent, message, caption, wx.OK | wx.ICON_ERROR)  
复制代码
而对于提供更多按钮的,也是设置参数即可,如下所述。
  1.     @staticmethod
  2.     def show_yes_no_tips(parent, message, caption=CAPTION_TIPS):
  3.         """显示询问用户信息,并显示提示标志"""
  4.         return MessageUtil.show_message(
  5.             parent, message, caption, wx.YES_NO | wx.ICON_INFORMATION
  6.         )
  7.     @staticmethod
  8.     def show_yes_no_warning(parent, message, caption=CAPTION_WARNING):
  9.         """显示询问用户信息,并显示警告标志"""
  10.         return MessageUtil.show_message(
  11.             parent, message, caption, wx.YES_NO | wx.ICON_WARNING
  12.         )
  13.     @staticmethod
  14.     def show_yes_no_error(parent, message, caption=CAPTION_ERROR):
  15.         """显示询问用户信息,并显示错误标志"""
  16.         return MessageUtil.show_message(
  17.             parent, message, caption, wx.YES_NO | wx.ICON_ERROR
  18.         )
复制代码
另外,wxpython还提供了TextEntryDialog、SingleChoiceDialog、MultiChoiceDialog等对话框,我们也可以简朴封装一下使用。
  1.     @staticmethod
  2.     def show_input_dialog(parent, message, caption, default_value):
  3.         """显示输入对话框"""
  4.         dlg = wx.TextEntryDialog(parent, message, caption, default_value)
  5.         result = dlg.ShowModal()
  6.         if result == wx.ID_OK:
  7.             return dlg.GetValue()
  8.         else:
  9.             return None
  10.     @staticmethod
  11.     def show_choice_dialog(parent, message, caption, choices):
  12.         """显示选择对话框"""
  13.         dlg = wx.SingleChoiceDialog(parent, message, caption, choices)
  14.         result = dlg.ShowModal()
  15.         if result == wx.ID_OK:
  16.             return dlg.GetStringSelection()
  17.         else:
  18.             return None
  19.     @staticmethod
  20.     def show_multi_choice_dialog(parent, message, caption, choices):
  21.         """显示多选对话框"""
  22.         dlg = wx.MultiChoiceDialog(parent, message, caption, choices)
  23.         result = dlg.ShowModal()
  24.         if result == wx.ID_OK:
  25.             return dlg.GetSelections()
  26.         else:
  27.             return None
复制代码
末了如下效果所示。

如许我们在程序里面统一调用就会有雷同的效果,而且简化了很多不须要的参数。
  1. MessageUtil.show_tips(None, "This is a test program.", "关于")
复制代码
以上就是一些日常开发的函数处置惩罚和抽象处置惩罚,重要就是为了简化实际开发的时间的一些复杂度,并提供统一的界面效果。
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大连密封材料

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表