質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

コンボボックス

GUIの要素のひとつです。Listboxと同様にいくつかのうちひとつを選択する機能だが、Comboboxの場合は選択されたもののみがデフォルトとして表示される。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1834閲覧

Python wxFormBuilderで作成したテキストボックスの値をエクセルに書き込みたい

hiro04kon

総合スコア46

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

コンボボックス

GUIの要素のひとつです。Listboxと同様にいくつかのうちひとつを選択する機能だが、Comboboxの場合は選択されたもののみがデフォルトとして表示される。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

0クリップ

投稿2021/05/24 06:19

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」となってしまい、認識できません。
簡単な質問かもしれませんが、ご助力よろしくお願いします。

teamikl👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ライブラリ元の C++ のエラーログがそのまま表示されてる状態なので、
wxPython のコードに読み替える必要があります。

解決策: style=wx.TE_PROCESS_ENTER を wx.TextCtrl の引数に指定する。

検証用コード

python

1import wx 2 3app = wx.App() 4win = wx.Frame(None) 5def onEnter(e): 6 print(e) 7textctrl = wx.TextCtrl(win, style=wx.TE_PROCESS_ENTER) # style~を外すと同じエラーが表示されます。 8textctrl.Bind(wx.EVT_TEXT_ENTER, onEnter) 9win.Show() 10app.MainLoop()

投稿2021/05/24 08:45

teamikl

総合スコア8664

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiro04kon

2021/05/24 11:32 編集

早速の返信ありがとうございました。 「self.classCtrl = wx.TextCtrl( self, wx.ID_ANY, u"入力", wx.DefaultPosition, wx.DefaultSize, 0 )」の最後の0を指定の因数に変更 「self.classCtrl = wx.TextCtrl( self, wx.ID_ANY, u"入力", wx.DefaultPosition, wx.DefaultSize, style=wx.TE_PROCESS_ENTE )」にしたら解決しました。 「style=」を付けることに、検索してもたどり着けず、助かりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問