wxPythonコードのスタイルガイド

StdDialogButtonSizerについて調べていたら、wxPythonコードのスタイルガイド(全10項目)を見つけたので、内容を確認し今後書くコードにできるだけ反映させたい。これに準ずるように努力すれば、クリアでPythonicなコードになるらしい。

以下引用の出典:wxPython Style Guide - wxPyWiki

1. 「import wx」を使い、「from wx import *」は使わないこと。

もちろん「import *」とかもダメ。すぐに思い浮かぶ理由は、名前衝突を避けるためと可読性が悪くなるから等か。

2. コンストラクタ内では、キーワード引数を使うこと。

例えば、wx.DefaultSize、wx.DefaultPosition、wx.ID_ANYでは
なく、MainFrame = wx.Frame(None, title="A Title", size=(500,400))のように明示的に書く。「Explicit is better than implicit」の精神。

2b. wx.Windowsのサブクラスでは、*argsと**kwargsを使うこと。

class MyPanel(wx.Panel):
def __init__(self, *args, **kwargs):
wx.Panel.__init__(self, *args, **kwargs)

こうすると、どの引数を受け渡したか悩まないで済む。

3. IDは使わないこと。

  • 例外:標準的なメニュー、ボタンには使うべき
  • IDを引数に加えなければならないときには、wx.ID_ANYを使う

「Simple is better than complex.」の精神。確かに毎回番号を割り振るのはたいへんだし、「-1」と書くのも見た目がきれいではない。「wx.ID_ANY == -1」ということのようだ。

4. イベントの指定には「Bind()」を使うこと。

これは普通にやっているのだが、他の方法があるのだろうか?

5. Sizerを使うこと。

いちいち座標を指定してウィジェットの位置決めをする方が面倒。プラットフォームごとに調整をしなくて済む。配置はこれでいいのだが、ボタンのサイズとかの調整をうまくするにはどうするか?

6. wx.App()はwx.PySimpleApp()と同じことができるので、wx.PySimpleApp()はいらない。

  • 例外:MacOSではwx.App()を使った場合、トレースバックが表示される画面がエラー発生時一瞬で消える。wx.PySimpleApp()では標準出力へ表示される。

そういえば、最近のコードではwx.PySimpleApp()を見ない。

7. 一つのクラス内でwx.Panelsをネストさせるよりも、別々のクラスとして使うこと。

(悪い例)
self.MainPanel = wx.Panel(self, ...)
self.SubPanel1 = wx.Panel(self.MainPanel, ..)
self.SubPanel2 = wx.Panel(self.SubPanel1, ...)
MyButton = wx.Button(self.SubPanel2, ...)

(改良例)
class MainPanel(wx.Panel):
...
class SubPanel1(wx.Panel):
...

コードが読みやすくなる。

8. 同じことができるのであれば、wxの機能を使うよりもできるだけPythonの機能を使うこと。

  • 例:「size=wx.Size()」よりも「size=()」が良い。

「Simple is better than complex.」の精神。「import platform」として「platform.system()」とするよりも、「wx.Platform」の方がいいかと思っていたがそうでもないのか。

9. 常にdocstringを使うこと。

ドキュメントも重要、ということだね。

10. Dialogのサブクラス上での、標準的なwx.IDを持つボタンの配置にはStdDialogButtonSizerを使うこと。

2012-01-19 - 理想のユーザ・インターフェイスを求めての話。


以上、10項目。大部分は当たり前のことを述べている印象。でも、2b、3、9等は出来ていなかった。