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等は出来ていなかった。