2018/03/02
wxPython & XRC で "AttributeError: 'Control' object has no attribute" が発生する場合の対処方法
@wxPython 4.0.1
以下のように XRC から wxDatePickerCtrl
等のコンポーネントを生成すると、Control
オブジェクトが返ってきてしまうことがあります。
1 2 3 4 5 6 7 8 9 10 | import wx import wx.xrc as xrc app = wx.App( False ) res = xrc.XmlResource( 'MainWindow.xrc' ) frame = res.LoadFrame( None , "top" ) dp = xrc.XRCCTRL(frame, 'datePicker' ) dp.GetValue() # ここでエラー "AttributeError: 'Control' object has no attribute 'GetValue'" frame.Show() app.MainLoop() |
1 2 3 4 5 6 7 8 9 10 11 12 13 | <? xml version = "1.0" ?> < resource > < object class = "wxFrame" name = "top" > < object class = "wxPanel" name = "panel" > < object class = "wxBoxSizer" name = "sizeer" > < orient >wxVERTICAL</ orient > < object class = "sizeritem" > < object class = "wxDatePickerCtrl" name = "datePicker" /> </ object > </ object > </ object > </ object > </ resource > |
なお、GetValue()
をコメントアウトして表示させると問題なく動作しているように見えます。
対象のパッケージが import されているか確認する
この問題、大抵は対象のパッケージが import されていないことが原因です。
DatePickerCtrl
は wx.adv
にあるので、これを import しないと上記のエラーが発生します。
1 2 3 | import wx import wx.adv import wx.xrc as xrc |
wxCalendarCtrl は直らない
ただし、wxCalendarCtrl
は以下のように wx.adv
を import しても直りません。
wxPython 4.0.1 現在、これはバグのようです。
1 2 3 4 5 6 7 8 9 10 11 | import wx import wx.adv import wx.xrc as xrc app = wx.App( False ) res = xrc.XmlResource( 'MainWindow.xrc' ) frame = res.LoadFrame( None , "top" ) calendar = xrc.XRCCTRL(frame, 'calendar' ) calendar.GetDate() # ここでエラー "AttributeError: 'Control' object has no attribute 'GetDate'" frame.Show() app.MainLoop() |
参考
0 件のコメント:
コメントを投稿