Style Guide for wxPython code

More

http://wiki.wxpython.org/

 

This is a little style guide for using wxPython. It's not the be-all and end-all of how wxPython code should be written, but what I've tried tocapture is a way to write wxPython code that is clear and Pythonic. It was vetted on the wxPython-users mailing list, with very littledisagreement.

Pythonic is partly defined by:

http://www.python.org/doc/Humor.html#zen

This is about how to use wxPython-specific classes and structure. For code formatting advice, particularly if you want to include it in the wxPython lib, see: http://wxpython.org/codeguidelines.php

1. Use import wx NEVER use from wx import * or the ancient from wxPython.wx import *.

  • Don't use import * for other libs either. 

    BECAUSE: Namespaces are one honking great idea. 

    For modules that are buried deep in a package, you can use:

    from wx.lib.SomeLib import SomeModule 
    As no one wants to type:

    AnObject = wx.lib.SomeLib.SomeModule.SomeClass()

2. Keyword arguments in constructors.

  • If you find yourself putting in a bunch of unneeded defaults

    like wx.DefaultSize, wx.DefaultPosition, wx.ID_ANY, etc. in constructors, use keyword arguments:

    MainFrame = wx.Frame(None, title="A Title", size=(500, 400)) 

    BECAUSE: Explicit is better than implicit.

2b. Use *args and **kwargs when subclassing wx.Windows:

 

 

 

  • This allows your custom Window to take all the same arguments as a standard Window, without your having to anticipate which ones might be useful in advance.

3. Don't use IDs. There is very rarely a good reason to use them.

  • BECAUSE: Simple is better than complex.
  • Most Widget constructors will fill in a default ID for you, so you don't have to specify one at all. Other arguments can be specified as key word arguments (see above):

    MyFrame = wx.Frame(None, title="A Title", size=(400,400))

    AButton = wx.Button(self, label="Push Me")

  • If the id is a required argument, use wx.ID_ANY. Because wx.ID_ANY == -1, you may see -1 used for an id in code, but use wx.ID_ANY to make your code clearer. And who knows, maybe that magic value will change one day. wx.ID_ANY is more explicit, as it is self-documenting and descriptive. Using the numeric value of named constants in general is extremely poor practice in any programming language. (Chris Mellon)



    BECAUSE: Explicit is better than implicit. 

    EXCEPTION: (there's always an exception!) Use standard IDs for standard menus, buttons, etc. It is useful to use the standard IDsbecause they may turn on standard functionality, such as menu item remapping for wxMac, automatic Dialog completion or cancellation,using stock button labels and images, etc. A list of these standard IDs can be found in the "Constants -- Stock items" section of the wxWidgets Reference manual. Example:

    item = FileMenu.Append(wx.ID_EXIT, "&Quit") This will put the Quit menu where it should be on OS-X, for instance.

4. Use the Bind() method to bind events:

  • A pushbutton example:

    AButton = wx.Button(self, label="Push Me")

    AButton.Bind(wx.EVT_BUTTON, self.OnButtonPush)

  • You can use Bind() for menus too, even though they don't have a Bind() method, in this way:

    FileMenu = wx.Menu()

    item = FileMenu.append(wx.ID_ANY, "&Quit")

    self.Bind(wx.EVT_MENU, self.OnQuit, item)

    (where self is a wx.Frame)

5. Use Sizers!

  • If you use Sizers rather than absolute positioning, you get code that:
  • Works better across platforms: different platforms have different size widgets.
  • Easily adapts to different languages: different languages have different length labels, etc.
  • Works better even on one platform is the user uses a different default font, different theme.
  • Is more maintainable: If you need to change, remove or add a widget, the rest of your dialog or panel can re-arrange itself.

6. wx.App() now has the same built in functionality as wx.PySimpleApp(),

  • so there is no need for the latter.

    Note: The above is not true on MacOS X. When using wx.App, tracebacks are shown in a dialog which instantly disappears as your app dies (unless run with pythonw -i). With wx.PySimpleApp, tracebacks go to stdout.

7. Use separate, custom classes rather than nesting lots of wx.Panels in one class.

  • If you find yourself doing this in an __init__:

    self.MainPanel = wx.Panel(self, ...

    self.SubPanel1 = wx.Panel(self.MainPanel, ..)

    self.SubPanel2 = wx.Panel(self.SubPanel1, ...)

    MyButton = wx.Button(self.SubPanel2, ....) 

    Then you are creating an ugly, hard to maintain, mess! 
    Instead, create custom classes for the stuff that all is working together in a panel:

    class MainPanel(wx.Panel):

    • ...

    class SubPanel1(wx.Panel):

    • ...
    etc. You'll also find that by doing this, you're less likely to break the "Don't Repeat Yourself" (DRY) principle. Often you'll find that youhave group of widgets that are common to various parts of your app. If you put them on a custom panel, you'll be able to re-use thatcode. Try to make each of these widgets autonomous, so they can be plugged in elsewhere in your app, or even another application. If your widget has to communicate with other controls define your own custom events and use them to communicate with other controls. Almost as a unit test it is nice to write a little demo app, which only uses that widget and demonstrates all its functionality.

8. Use native Python stuff rather than wx stuff where possible:

  • BECAUSE: Simple is better than complex.

    For example, use size=(500, 400) rather than size=wx.Size(500, 400)

9. Use docstrings, consistently.

 

Example

 

 

 

 

 

Comments

 

Put your comments here.

Please also feel free to add to this page, though if you want to change something, please discuss on the wxPython-users group first (unless you're RobinDunn).

Franz Steinhaeusler, 16. Jan. 2006:

  • Added docstrings for init methods.

 

History

 

First Written 1/11/2006 by Chris Barker, with a lot of help from the wxPython-users mailing list.

 

内容概要:本文围绕基于CNN-Transformer混合模型的锂电池SOH(State of Health,健康状态)预测估计展开研究,提出一种融合卷积神经网络(CNN)与Transformer架构的深度学习方法,用于精准建模电池容量衰退过程。该方法充分发挥CNN在局部特征提取方面的优势以及Transformer在捕捉长时间序列依赖关系上的强大能力,有效提升了锂电池健康状态预测的准确性与稳定性。研究内容涵盖数据预处理、模型结构设计、训练优化流程及预测结果可视化等关键环节,适用于电池退化趋势分析与剩余使用寿命(RUL)评估,具有较强的工程应用价值。; 适合人群:具备Python编程能力和深度学习理论基础的高校研究生、科研人员及从事新能源电池管理系统开发的工程技术人才,特别适合聚焦于锂电池寿命预测、故障诊断与健康管理等方向的研究者。; 使用场景及目标:①掌握CNN与Transformer在时间序列回归任务中的协同建模机制;②实现高精度锂电池SOH预测模型构建与训练;③服务于电动汽车续航管理、储能系统运维决策与电池老化特性分析;④支持学术论文复现、科研项目验证及工业级电池管理算法开发。; 阅读建议:此资源以代码实践为核心驱动,建议读者结合所提供的完整Python代码进行动手实现,深入理解模型各模块的设计逻辑与训练技巧,并可通过调整网络结构或引入新数据集进一步拓展至其他时序预测任务中。
我们把同一标的(昆仑万维,现价 43.20 元,2026-07-31 收盘)交给三套系统,各出一份独立分析: **C 报告(CoordClaw 基于管理学多智能体系统)**——投研级。它由五个角色构成:周婷整合撰写、李静出基本面、王芳出技术面、赵明出风险、陈默做 PM 终审。最终产物是一份 38 项分级风险清单(P0×4 / P1×12 / P2×12 / P3×6 / 尾部×4)、双源交叉验证的财务数据(EM/Sina 差异 <0.01%)、严格的口径纪律,以及一份原样保留的"待核实"清单。结论冷冰冰:高风险,不建议参与。 **D 报告(DeepSeek)**——信息整理级。它把"4+3 AGI 战略"、天工 AI、Opera 浏览器、StarMaker 拆得很漂亮,核心财务数据(营收 81.98 亿、归母 -15.93 亿)也没算错。但整篇没有技术面、没有量化风控,更关键的是——它完全没提实控人已减持 75%、质押状态未知、净现金仅 15.19 亿且续航只有 1.26~1.81 年这些要命的负面。这是典型的"选择性呈现"。 **K 报告(Kimi)**——以对比评估的方式呈现。它搭起"数据准确性 / 分析维度 / 结论合理性"的三维框架,把几份材料放在一起对照,给出各自的强弱判定。它的维度意识比 D 报告更自觉,但作为一份独立分析,它对"评估方法本身的信度"交待不足,部分引用的核对也不够彻底。 结果两家的结论高度一致。C 报告(多智能体)被评投研级、居首;D 报告(DeepSeek 自己写的)被评信息整理级、居中;K 报告(Kimi 自己那份)维度较全但核验深度有限,排在两者之间。DeepSeek 的那份评估把 C 给了五星、D 三星、K 四星;Kimi 的那份评估也独立地把最高分给了 C。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值