今wxpythonモジュールで日付を設定するダイアログを作っています。
年と月と日をcomboboxで作っていつのですが、
日は月ごとに変わるので月のcomboboxイベントで日の要素を変更したいと思っています。
なかなかうまくいかず困っています。
ご存じの方いらっしゃいましたら、アドバイスいただけると助かります。
以下、コードです。
python
1# -*- coding: utf-8 -*- 2import wx 3import datetime 4 5#日にち 6dt_now = datetime.datetime.today() 7year_today = str(dt_now.year) 8month_today = str(dt_now.month) 9day_today = str(dt_now.day) 10 11def list2str(element): 12 return [str(i) for i in element] 13 14element_array_year = list2str([int(year_today) + i - 1 for i in range(3)]) 15element_array_month = list2str(['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12']) 16element_array_day_30 = list2str([i + 1 for i in range(30)]) 17element_array_day_31 = list2str([i + 1 for i in range(31)]) 18element_array_day_forFeb = list2str([i + 1 for i in range(28)]) 19element_array_day_forFeb_URUU = list2str([i + 1 for i in range(29)]) 20 21class SetupDialog(wx.Dialog): 22 23 """ダイアログの生成""" 24 25 def __init__(self, parent, id, title): 26 wx.Dialog.__init__(self, parent, id, title) 27 self.panel = wx.Panel(self, wx.ID_ANY) 28 self.year_type = 'heinen' 29 30 # print(today) 31 32 self.yearCbox = wx.ComboBox(self.panel, wx.ID_ANY, '年', choices=element_array_year, style=wx.CB_READONLY, size=(60,20)) 33 self.yeartext = wx.StaticText(self.panel, wx.ID_ANY, '年') 34 self.yearCbox.Bind(wx.EVT_COMBOBOX, self.year_event) 35 self.monthCbox = wx.ComboBox(self.panel, wx.ID_ANY, '月', choices=element_array_month, style=wx.CB_READONLY, size=(60,20)) 36 self.monthtext = wx.StaticText(self.panel, wx.ID_ANY, '月') 37 self.monthCbox.Bind(wx.EVT_COMBOBOX, self.month_event) 38 self.dayCbox = wx.ComboBox(self.panel, wx.ID_ANY, '日', choices=element_array_day_31, style=wx.CB_READONLY, size=(60,20)) 39 self.daytext = wx.StaticText(self.panel, wx.ID_ANY, '日以降を選択') 40 self.button = wx.Button(self.panel, wx.ID_OK, "リストアップ") 41 42 hbox = wx.BoxSizer(wx.HORIZONTAL) 43 hbox.Add(self.yearCbox) 44 hbox.Add(self.yeartext) 45 hbox.Add(self.monthCbox) 46 hbox.Add(self.monthtext) 47 hbox.Add(self.dayCbox) 48 hbox.Add(self.daytext) 49 50 v_layout = wx.BoxSizer(wx.VERTICAL) 51 v_layout.Add(hbox) 52 v_layout.Add(self.button) 53 54 self.panel.SetSizer(v_layout) 55 56 def year_event(self, event): 57 obj = event.GetEventObject() 58 year = int(obj.GetValue()) 59 print(year) 60 if year % 4 != 0: 61 self.year_type = 'heinen' 62 elif year % 100 != 0: 63 self.year_type = 'uruu' 64 elif year % 400 != 0: 65 self.year_type = 'heinen' 66 else: 67 self.year_type = 'uruu' 68 print(self.year_type) 69 70 71 def month_event(self, event): 72 obj = event.GetEventObject() 73 month = int(obj.GetValue()) 74 if month == 1 or month == 3 or month == 5 or month == 7 or month == 8 or month == 10 or month == 12: 75 self.dayCbox = wx.ComboBox(self.panel, wx.ID_ANY, '日', choices=element_array_day_31, style=wx.CB_READONLY, 76 size=(60, 20)) 77 elif month != 2: 78 self.dayCbox = wx.ComboBox(self.panel, wx.ID_ANY, '日', choices=element_array_day_30, style=wx.CB_READONLY, 79 size=(60, 20)) 80 elif self.year_type == 'heinen': 81 self.dayCbox = wx.ComboBox(self.panel, wx.ID_ANY, '日', choices=element_array_day_forFeb, style=wx.CB_READONLY, 82 size=(60, 20)) 83 else: 84 self.dayCbox = wx.ComboBox(self.panel, wx.ID_ANY, '日', choices=element_array_day_forFeb_URUU, style=wx.CB_READONLY, 85 size=(60, 20)) 86def main(): 87 app = wx.App() 88 frame = wx.Frame(None, wx.ID_ANY, 'テストフレーム') 89 dialog = SetupDialog(frame, wx.ID_ANY, "ニューダイアログ") 90 dialog.ShowModal() 91 frame.Show() 92 app.MainLoop() 93 94if __name__ == '__main__': 95 main()
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/05 00:51