python初心者です。wxFormBuilderでフォームを作り、入力された値を予め読み込んでおいたエクセルに書き込みたいのですが、エラーが出ます。
エラー内容は、「wx._core.wxAssertionError: C++ assertion ""HasFlag(0x0400)"" failed at ....\src\common\textcmn.cpp(1210) in wxTextCtrlBase::OnDynamicBind(): Must have wxTE_PROCESS_ENTER for wxEVT_TEXT_ENTER to work」です。
ファイルは2つで、メインプロセスとサブプロセスが出力されています。サブプロセスの「classCtrlOnTextEnter」にその動作を書き込みました。
まず、メインプロセス
python
1# -*- coding: utf-8 -*- 2 3########################################################################### 4## Python code generated with wxFormBuilder (version Oct 26 2018) 5## http://www.wxformbuilder.org/ 6## 7## PLEASE DO *NOT* EDIT THIS FILE! 8########################################################################### 9 10import wx 11import wx.xrc 12import openpyxl 13 14#####エクセルの'SHeet1'を読み込む##### 15 16wb = openpyxl.load_workbook('C:/test.xlsx') 17ws = wb['Sheet1'] 18 19########################################################################### 20## Class MakeFrame 21########################################################################### 22 23class MakeFrame ( wx.Frame ): 24 25 def __init__( self, parent ): 26 wx.Frame.__init__ ( self, parent, id = wx.ID_ANY, title = wx.EmptyString, pos = wx.DefaultPosition, size = wx.Size( 540,76 ), style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL ) 27 28 self.SetSizeHints( wx.DefaultSize, wx.DefaultSize ) 29 bSizer1 = wx.BoxSizer( wx.HORIZONTAL ) 30 31 self.classCtrl = wx.TextCtrl( self, wx.ID_ANY, u"入力", wx.DefaultPosition, wx.DefaultSize, 0 ) 32 bSizer1.Add( self.classCtrl, 0, wx.ALIGN_CENTER|wx.ALL, 5 ) 33 34 self.yokoText = wx.StaticText( self, wx.ID_ANY, u"席 横", wx.DefaultPosition, wx.DefaultSize, 0 ) 35 self.yokoText.Wrap( -1 ) 36 37 bSizer1.Add( self.yokoText, 0, wx.ALIGN_CENTER|wx.ALL, 5 ) 38 39 self.yokoCtrl = wx.TextCtrl( self, wx.ID_ANY, u"1", wx.DefaultPosition, wx.DefaultSize, 0 ) 40 self.yokoCtrl.SetMinSize( wx.Size( 30,-1 ) ) 41 42 bSizer1.Add( self.yokoCtrl, 0, wx.ALIGN_CENTER|wx.ALL, 5 ) 43 44 self.tateText = wx.StaticText( self, wx.ID_ANY, u"× 縦", wx.DefaultPosition, wx.DefaultSize, 0 ) 45 self.tateText.Wrap( -1 ) 46 47 bSizer1.Add( self.tateText, 0, wx.ALIGN_CENTER|wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 5 ) 48 49 self.tateCtrl = wx.TextCtrl( self, wx.ID_ANY, u"1", wx.DefaultPosition, wx.DefaultSize, 0 ) 50 self.tateCtrl.SetMinSize( wx.Size( 30,-1 ) ) 51 52 bSizer1.Add( self.tateCtrl, 0, wx.ALIGN_CENTER|wx.ALL, 5 ) 53 54 self.m_make_button = wx.Button( self, wx.ID_ANY, u"作成", wx.DefaultPosition, wx.DefaultSize, 0 ) 55 bSizer1.Add( self.m_make_button, 0, wx.ALIGN_CENTER|wx.ALL, 5 ) 56 self.SetSizer( bSizer1 ) 57 self.Layout() 58 self.Centre( wx.BOTH ) 59 60 # Connect Events 61 self.classCtrl.Bind( wx.EVT_TEXT_ENTER, self.classCtrlOnTextEnter ) 62 self.yokoCtrl.Bind( wx.EVT_TEXT_ENTER, self.yokoCtrlOnTextEnter ) 63 self.tateCtrl.Bind( wx.EVT_TEXT_ENTER, self.tateCtrlOnTextEnter ) 64 self.m_make_button.Bind( wx.EVT_BUTTON, self.m_make_buttonOnButtonClick ) 65 66 def __del__( self ): 67 pass 68 69 # Virtual event handlers, overide them in your derived class 70 def classCtrlOnTextEnter( self, event ): 71 event.Skip() 72 def yokoCtrlOnTextEnter( self, event ): 73 event.Skip() 74 def tateCtrlOnTextEnter( self, event ): 75 event.Skip() 76 def m_make_buttonOnButtonClick( self, event ): 77 event.Skip() 78
続いてサブプロセスです。
python
1"""Subclass of MakeFrame, which is generated by wxFormBuilder.""" 2 3import wx 4import seki 5import openpyxl 6from seki import MakeFrame , wb, ws 7 8# Implementing MakeFrame 9class sekiMakeFrame( seki.MakeFrame ): 10 def __init__( self, parent ): 11 seki.MakeFrame.__init__( self, parent ) 12 13 # Handlers for MakeFrame events. 14 def classCtrlOnTextEnter( self, event ): 15 # TODO: Implement classCtrlOnTextEnter 16 ####入力された値を、選択したエクセルへ書き込み#### 17 input_text = self.classCtrl.GetValue() 18 c1 = ws.cell(row=1, column=3) 19 c1.value = input_text 20 wb.save('C:/test.xlsx') 21 pass 22 23 def yokoCtrlOnTextEnter( self, event ): 24 # TODO: Implement yokoCtrlOnTextEnter 25 pass 26 27 def tateCtrlOnTextEnter( self, event ): 28 # TODO: Implement tateCtrlOnTextEnter 29 pass 30 31 def m_make_buttonOnButtonClick( self, event ): 32 # TODO: Implement m_make_buttonOnButtonClick 33 pass 34 35if __name__ == '__main__': 36 app = wx.App(False) 37 frame = sekiMakeFrame(None) 38 frame.Show(True) 39 app.MainLoop()
エラーの内容により、「wxTE_PROCESS_ENTER」を入れなければいれないのは分かりましたが、「self.classCtrl」の最後を「wxTE_PROCESS_ENTER」にしても、「not defined」となってしまい、認識できません。
簡単な質問かもしれませんが、ご助力よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/24 11:32 編集