格式化的天气.TextCtrl只有数字值-浮点精度

Formatting wx.TextCtrl with numeric values only - float precision

本文关键字:精度 数字 TextCtrl 格式化      更新时间:2023-10-16

我创建了一个简单的应用程序,它使用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); 

"

参见wxWidgets 2.9中可用的wxFloatingPointValidator