wxPython – AGW扩展包

wxPython – AGW扩展包Advanced Generic Widgets 扩展包 FlatMenu 顾名思义 它是一个通用的菜单实现 提供相同或更多的 wx MenuBar wx Menu ToolBar 的功能

欢迎大家来到IT世界,在知识的湖畔探索吧!

实战wxPython系列-046

wxPython - AGW扩展包



欢迎大家来到IT世界,在知识的湖畔探索吧!

Advanced Generic Widgets (AGW)扩展包。它提供了许多自定义绘制的wxPython控件。其中一些控件可以用作平台本机控件的替代品,其他控件只是对已经丰富的wxPython控件集的补充。

一、AGW中的模块

AGW包含许多不同的模块,如下所示。

  • AdvancedSplash:再现wx.SplashScreen的行为,具有更高级的功能,如自定义形状和文本动画;
  • AquaButton:这是另一个自定义绘制的按钮类,它大致模仿了Mac上Aqua按钮的行为;
  • AUI:一个纯python实现的aui,修复了许多错误和实现了一些新功能;
  • BalloonTip:允许在一个气球样式的窗口(实际上是一个框架)中显示工具提示,类似于Windows的气球帮助;
  • ButtonPanel:一个带有渐变背景阴影的面板,可以添加按钮和控制。
  • CubeColourDialog:wx.ColourDialog的一个替代实现,它提供了不同的功能,如色轮和RGB立方体;
  • CustomTreeCtrl :模仿TreeCtrl的行为,具有几乎相同的基本功能,外加一堆增强功能;
  • FlatMenu:顾名思义,它是一个通用的菜单实现,提供相同或更多的wx.MenuBar / wx.Menu / ToolBar的功能;
  • FlatNotebook :Notebook的全面实现,并被设计为具有增强功能的Notebook的即时替代品;
  • FloatSpin:这个类实现了一个浮点spinctrl,可以(理论上)处理无限精度浮点数;
  • FoldPanelBar:包含多个面板的控件,可以像Windows资源管理器/Outlook命令栏一样展开或折叠;
  • FourWaySplitter:这是一个布局管理器,它管理四个子窗口,就像一个窗口中的四个窗格,类似于许多CAD软件界面;
  • GenericMessageDialog:标准MessageDialog的可能替代品,具有更漂亮的外观和扩展的功能;
  • GradientButton:另一个自定义绘制的按钮类,模仿Windows CE移动渐变按钮,使用三顶点混合渐变背景;
  • HyperLinkCtrl :这个控件在典型的浏览器中充当行超链接;
  • HyperTreeList:一个模仿wx.adv.TreeListCtrl行为的类,在具有几乎相同的基本功能上增加了更多的功能;
  • InfoBar:显示在其父窗口顶部或底部的一个瞬态窗口,用于向用户显示非关键信息;
  • KnobCtrl:一个就像一个带轮子形状的滑块,让用户通过旋转来选择数值的控件;
  • LabelBook 和FlatImageBook:在Listbook完全实现之上增加了一些功能;
  • MultiDirDialog:DirDialog的可能替代品,具有一次选择多个文件夹的额外能力和更漂亮的外观;
  • PeakMeter:这个控件模仿了通常在立体声音响和MP3播放器中发现的LED均衡器的行为;
  • PersistentControls:即使在另一个程序调用期间,控件在被销毁时自动保存状态,在重新创建时自动恢复状态;
  • PieCtrl 和ProgressPie :以静态或类似进度表的方式再现饼图的行为;
  • PyBusyInfo:构造一个忙碌信息窗口并在其中显示一条消息:它类似于BusyInfo;
  • PyCollapsiblePane:一个纯Python实现带有定制按钮的折叠面板;
  • PyGauge:一个通用的Gauge实现,它支持wx.Gauge确立的功能;
  • PyProgress:类似于不确定模式下的ProgressDialog,但具有不同的gauge外观和不同的旋转行为;
  • RibbonBar:RibbonBar库是一组用于编写ribbon用户界面的类,类似于Microsoft Office最新版本中的用户界面;
  • RulerCtrl:它实现了一个标尺窗口,可以放置在任何wxPython控件的顶部、底部、左侧或右侧。它有点类似于你可以在文本编辑软件中找到的标尺;
  • ShapedButton:这个类试图填补wxPython中“自定义形状”控件的不足。可用于制作圆形按钮或椭圆按钮;
  • ShortcutEditor:允许用户通过对话框自定义和更改键盘快捷键的控件;
  • SpeedMeter:这个控件试图通过创建一个“角”控件来重现一些汽车控件的行为(但不仅如此);
  • SuperToolTip:一个模仿TipWindow和通用工具提示行为的类,具有许多特性以及高度可定制性;
  • ThumbnailCtrl:一个可用于以“缩略图”格式显示一系列图像的控件;例如,当你选择“查看缩略图”选项时,它会模仿Windows资源管理器的行为;
  • ToasterBox:一个跨平台的控件,使msn风格,更容易创建弹出窗口;
  • UltimateListCtrl:模仿ListCtrl的行为,几乎相同的基本功能加上一些更多的功能;
  • XLSGrid:一个基于网格的类。可以用来真实地再现微软Excel电子表格的外观;
  • ZoomBar:一个在面板内近似地模仿Mac Dock的行为的控件。

在前文“wxPython-一些扩展按钮控件”我们演示了AquaButton, GradientButton和ShapedButton按钮的用法,在本文下面的内容中,我们将介绍如何使用PeakMeter,PieCtrl 和ProgressPie,RulerCtrl以及SpeedMeter控件。

二、PeakMeter

PeakMeter模仿通常在立体声音响和MP3播放器中发现的均衡器的行为。它支持:

  • 垂直和水平led带;
  • 设置频带数量和每个频带的led;
  • 可根据低/中/高频带频率改变颜色;
  • Falloff特效;
  • 显示背景网格。
#wx.lib.agw.peakmeter.PeakMeter import wx import random import wx.lib.agw.peakmeter as pm class SamplePeakMeter(wx.Frame): def __init__(self, *args, kw): super(SamplePeakMeter, self).__init__(*args, kw) self.InitUi() def InitUi(self): self.SetTitle("实战wxPython: PeakMeter演示") self.SetSize(480, 320) panel = wx.Panel(self) # 初始化峰值仪表控制1 self.vert_pm = pm.PeakMeterCtrl(panel, wx.ID_ANY, style = wx.SIMPLE_BORDER, agwStyle=pm.PM_VERTICAL) # 初始化峰值仪表控制2 self.horz_pm = pm.PeakMeterCtrl(panel, wx.ID_ANY, style=wx.SUNKEN_BORDER, agwStyle=pm.PM_HORIZONTAL) self.vert_pm.SetMeterBands(10, 15) self.horz_pm.SetMeterBands(10, 15) # 布局两个PeakMeterCtrl main_sizer = wx.BoxSizer(wx.HORIZONTAL) main_sizer.Add(self.vert_pm, 0, wx.EXPAND | wx.ALL, 15) main_sizer.Add(self.horz_pm, 0, wx.EXPAND | wx.ALL, 15) panel.SetSizer(main_sizer) main_sizer.Layout() self.timer = wx.Timer(self) self.Bind(wx.EVT_TIMER, self.OnTimer) wx.CallLater(500, self.Start) self.Centre() def Start(self): """ 开始PeakMeterCtrl""" self.timer.Start(1000/2) # 2fps self.vert_pm.Start(1000/18) # 18fps self.horz_pm.Start(1000/20) # 20fps def OnTimer(self, e): #生成15个随机数,设置为仪表数据 elems = 15 array_data = [] for i in range(elems): r = random.randint(0,100) array_data.append(r) self.vert_pm.SetData(array_data, 0, elems) self.horz_pm.SetData(array_data, 0, elems) def main(): app = wx.App() sample = SamplePeakMeter(None) sample.Show() app.MainLoop() if __name__ == "__main__": main()

欢迎大家来到IT世界,在知识的湖畔探索吧!

程序演示了一个水平和垂直放置的LED功率显示效果。

wxPython - AGW扩展包

图1:AGW PeakMeter演示

三、PieCtrl 和ProgressPie

PieCtrl和ProgressPie是再现饼图行为的简单类。它们只使用纯wxPython类/方法,没有外部依赖关系。PieCtrl在某种程度上是一个“静态”控件,可以用它们在wx.Panel或类似控件上创建并显示一个简单的饼图。ProgressPie尝试使用饼图来模拟wx.ProgressDialog的行为。

使用PieCtrl,可以:

  • 创建一个包含不同扇区的PieCtrl;
  • 设置扇区值、颜色和标签;
  • 给PieCtrl分配一个图例;
  • 使用图像作为PieCtrl背景;
  • 改变PieCtrl的垂直旋转(视角);
  • 显示/隐藏段边。
欢迎大家来到IT世界,在知识的湖畔探索吧!#wx.lib.agw.piectrl.PieCtrl import wx import wx.lib.agw.piectrl as pc class SamplePieCtrl(wx.Frame): def __init__(self, *args, kw): super(SamplePieCtrl, self).__init__(*args, kw) self.InitUi() def InitUi(self): self.SetTitle("实战wxPython: PieCtrl演示") self.SetSize(420, 300) panel = wx.Panel(self) #创建一个简单的PieCtrl,有3个扇区 my_pie = pc.PieCtrl(panel, wx.ID_ANY, wx.DefaultPosition, wx.Size(180, 270)) part = pc.PiePart() part.SetLabel("标签1") part.SetValue(300) part.SetColour(wx.Colour(200, 50, 50)) my_pie._series.append(part) part = pc.PiePart() part.SetLabel("标签2") part.SetValue(200) part.SetColour(wx.Colour(50, 200, 50)) my_pie._series.append(part) part = pc.PiePart() part.SetLabel("标签3") part.SetValue(50) part.SetColour(wx.Colour(50, 50, 200)) my_pie._series.append(part) #创建一个ProgressPie progress_pie = pc.ProgressPie(panel, 100, 50, -1, wx.DefaultPosition, wx.Size(180, 200), wx.SIMPLE_BORDER) progress_pie.SetBackColour(wx.Colour(150, 200, 255)) progress_pie.SetFilledColour(wx.Colour(255, 0, 0)) progress_pie.SetUnfilledColour(wx.WHITE) progress_pie.SetHeight(20) main_sizer = wx.BoxSizer(wx.HORIZONTAL) main_sizer.Add(my_pie, 1, wx.EXPAND | wx.ALL, 5) main_sizer.Add(progress_pie, 1, wx.EXPAND | wx.ALL, 5) panel.SetSizer(main_sizer) main_sizer.Layout() self.Centre() def main(): app = wx.App() sample = SamplePieCtrl(None) sample.Show() app.MainLoop() if __name__ == "__main__": main()

上面代码演示了如何使用PieCtrl和ProgressPie。

wxPython - AGW扩展包

图2:PieCtrl和ProgressPie演示

四、RulerCtrl

RulerCtrl实现了一个标尺窗口,可以放置在任何wxPython小部件的顶部、底部、左侧或右侧。它有点类似于文本编辑器软件中的标尺(尽管没有那么强大)。

RulerCtrl具有以下特点:

  • 可以是水平的也可以是垂直的;
  • 内置格式:整数,实时,时间和线性db格式;
  • 单位(如厘米,dB,英寸)可以与标签值一起显示;
  • 可以添加一些“段落指标”,小箭头指向当前指标的位置;
  • 可定制背景色、刻度色、标签色;
  • 翻转标尺的刻度(即改变刻度对齐);
  • 单独更改指示器颜色;
  • 支持不同类型的窗口边框(wx.STATIC_BORDER, wx.SUNKEN_BORDER, wx.DOUBLE_BORDER, wx.NO_BORDER, wx.RAISED_BORDER, wx.SIMPLE_BORDER);
  • 可用对数刻度;
  • 当移动指示器时,可以在选定的窗口上画一条细线(这模拟了文本编辑器软件)。
#wx.lib.agw.rulerctrl.RulerCtrl import wx import wx.lib.agw.rulerctrl as rc class SampleRulerCtrl(wx.Frame): def __init__(self, *args, kw): super(SampleRulerCtrl, self).__init__(*args, kw) self.InitUi() def InitUi(self): self.SetTitle("实战wxPython: RulerCtrl演示") self.SetSize(480, 280) panel = wx.Panel(self) text = wx.TextCtrl(panel, wx.ID_ANY, "Hello World! wxPython rules", style = wx.TE_MULTILINE) ruler1 = rc.RulerCtrl(panel, wx.ID_ANY, orient=wx.HORIZONTAL, style = wx.NO_BORDER) ruler2 = rc.RulerCtrl(panel, wx.ID_ANY, orient=wx.VERTICAL, style = wx.NO_BORDER) mainSizer = wx.BoxSizer(wx.HORIZONTAL) leftSizer = wx.BoxSizer(wx.VERTICAL) bottomLeftSizer = wx.BoxSizer(wx.HORIZONTAL) topSizer = wx.BoxSizer(wx.HORIZONTAL) leftSizer.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0) topSizer.Add((39, 0), 0, wx.ADJUST_MINSIZE, 0) topSizer.Add(ruler1, 1, wx.EXPAND, 0) leftSizer.Add(topSizer, 0, wx.EXPAND) bottomLeftSizer.Add((10, 0)) bottomLeftSizer.Add(ruler2, 0, wx.EXPAND, 0) bottomLeftSizer.Add(text, 1, wx.EXPAND, 0) leftSizer.Add(bottomLeftSizer, 1, wx.EXPAND, 0) mainSizer.Add(leftSizer, 3, wx.EXPAND, 0) panel.SetSizer(mainSizer) self.Centre() def main(): app = wx.App() sample = SampleRulerCtrl(None) sample.Show() app.MainLoop() if __name__ == "__main__": main()

程序创建了一个水平放置和一个垂直放置的标尺,模拟文本编辑器的效果。

wxPython - AGW扩展包

图3:RulerCtrl演示

五、SpeedMeter

SpeedMeter试图通过创建一个“有角度的”控件(实际上是圆形的)来重现一些汽车控件的行为(但不仅如此)。

SpeedMeter从一个空的位图开始构造,它使用wxDC类的一些函数来创建圆角效果。所有事情都在SpeedMeter类的Draw()方法中处理。

SpeedMeter是高度可定制的,可以设置:

  • 测速仪存在的起始角和终止角;
  • 划分速度计的间隔(数值);
  • 区间对应的厚度;
  • 间隔颜色(不同的间隔可能有不同的填充颜色);
  • 刻度字体和颜色;
  • 背景颜色(超出速度计区域);
  • 外弧的颜色;
  • 指针(箭头)颜色;
  • 指针(箭头)的影子颜色;
  • 指针(箭头)的风格;
  • 分部分的填充颜色;
  • 次要(中间)刻度的数量;
  • 增加速度的方向(“前进”或“反向”);
  • 中心位置绘制的文本及其字体;
  • 中心位置绘制图标;
  • 第一和第二渐变颜色(填充SpeedMeter控件);
  • 设置当前值。
欢迎大家来到IT世界,在知识的湖畔探索吧!#wx.lib.agw.speedmeter.SpeedMeter import wx import math import wx.lib.agw.speedmeter as sm class SampleSpeedMeter(wx.Frame): def __init__(self, *args, kw): super(SampleSpeedMeter, self).__init__(*args, kw) self.InitUi() def InitUi(self): self.SetTitle("实战wxPython: SpeedMeter演示") self.SetSize(400, 320) speed = sm.SpeedMeter(self, agwStyle = sm.SM_DRAW_HAND|sm.SM_DRAW_SECTORS|sm.SM_DRAW_MIDDLE_TEXT|sm.SM_DRAW_SECONDARY_TICKS) # 设置速度计的存在区域(始终以弧度为单位!!!!) speed.SetAngleRange(-math.pi/6, 7 * math.pi / 6) # 划分速度表扇区间隔 intervals = range(0, 201, 20) speed.SetIntervals(intervals) # 为所有扇区分配相同的颜色(我们模拟汽车控制速度)。通常为黑色 colors = [wx.BLACK] * 10 speed.SetIntervalColours(colors) # 指定刻度:在这里,它们只是相当于间隔的字符串 ticks = [str(interval) for interval in intervals] speed.SetTicks(ticks) # 设置刻度标志的颜色 speed.SetTicksColour(wx.WHITE) # 在主刻度之间画5个次要刻度 speed.SetNumberOfSecondaryTicks(5) # 设置刻度标记的字体 speed.SetTicksFont(wx.Font(7, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) # 设置仪表中心的文字信息 speed.SetMiddleText("Km/h") # 指定仪表中心文字的颜色 speed.SetMiddleTextColour(wx.WHITE) # 设置仪表中心文字的字体 speed.SetMiddleTextFont(wx.Font(8, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_BOLD)) # 设置指针的颜色 speed.SetHandColour(wx.Colour(255, 50, 0)) # 不要绘制外部(容器)弧线。 speed.DrawExternalArc(False) # 设置速度计当前的值 speed.SetSpeedValue(44) self.Centre() def main(): app = wx.App() sample = SampleSpeedMeter(None) sample.Show() app.MainLoop() if __name__ == "__main__": main()

上述代码演示了一个炫酷的仪表盘效果。

wxPython - AGW扩展包

图4:SpeedMeter演示

六、本文知识点

  • 了解AGW包支持的控件。
  • 了解和使用PeakMeter控件。
  • 了解和使用PieCtr和ProgressPie控件。
  • 了解和使用RulerCtrl控件。
  • 了解和使用SpeedMeter控件。

前一篇:wxPython – 一些扩展按钮控件

欢迎关注,评论,收藏,点赞,和转发。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/99853.html

(0)
上一篇 2小时前
下一篇 2小时前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信