数値のみを受け入れるために、wxFILTER_NUMERICで裸のTextCtrlウィジェットを使用する単純なアプリを作成しました(以下のコードを参照)。
ユーザーが値を入力する方法に関係なく、値の表示精度を固定する必要があります(たとえば、17.0または17.000000の値が指定されている場合は常に17.0000が表示されます)。wxPythonには、派生したNumCtrlウィジェット(http://wxpython.org/docs/api/wx.lib.masked.numctrl-module.html)を使用するオプションがあることがわかりましたが、見つかりません。基本的なwxWidgetsライブラリにあります。
それで、私が単に見つけることができない、または挿入された番号の形式を手動で変更する関数を作成する必要がある場所でこれを利用できる準備ができている解決策はありますか(EVT_TEXTおよびEVT_TEXT_ENTERイベントの処理と入力文字列の変更) ?
私がこれまでに持っているもの:
イベントテーブル
BEGIN_EVENT_TABLE(MyFrame, wxFrame)
EVT_MENU(ID_Quit, MyFrame::OnQuit)
EVT_MENU(ID_About, MyFrame::OnAbout)
EVT_TEXT(ID_textBox, MyFrame::ValueChanged)
EVT_TEXT_ENTER(ID_textBox, MyFrame::ValueChanged)
END_EVENT_TABLE()
MyFrame内のテキストボックスの実装
wxPanel *panel = new wxPanel(this, -1);
_textBox1 = new wxTextCtrl(panel,
ID_textBox,
"0.0000",
wxPoint(100, 100),
wxSize(80,20),
wxTE_PROCESS_ENTER,
wxTextValidator(wxFILTER_NUMERIC,&_myValue),
wxTextCtrlNameStr);
ハンドリング機能
void MyFrame::ValueChanged(wxCommandEvent& WXUNUSED(event))
{
// modify the string or do something clever
}
採用されたソリューション回答 のおかげで、問題は解決されました。これが私が行ったものです:
`
wxFloatingPointValidator<double> _val(2,&_myValue,wxNUM_VAL_ZERO_AS_BLANK);
_val.SetRange(0.,100.); // set allowable range
_textBox1 = new wxTextCtrl(panel, // create a textCtrl
ID_textBox,
"0.0000",
wxPoint(100, 30),
wxSize(80,20),
wxTE_PROCESS_ENTER,
_val, // associate the text box with the desired validator
wxTextCtrlNameStr);
`