从wxPython中的TextCtrl-box获取整数值

时间:2014-07-01 11:44:40

标签: python wxpython

我正在编写一个wx应用程序,其中输入TextCtrl-boxes的值将用作函数的参数。这不起作用,我开始怀疑这是因为它们从一开始就没有被正确阅读。我有一个窗口,其中包含一些这些框,并使用GetValue()函数从中获取值,如下所示:

var = tc1.GetValue()

这会导致错误进一步向下的行,其中值不被视为整数,因为它们应该是。我尝试用这一行纠正这个问题:

var = int(tc1.GetValue())

这给出了错误消息“值错误:对于带有基数为10的int()的无效文字:”。我不知道这意味着什么。

我该怎么办?

3 个答案:

答案 0 :(得分:2)

如果您尝试将非整数或浮点数字符串转换为整数,则会出现此错误。最好的办法是设置一个try: - except:块来处理这个错误。

尝试这样的事情:

import wx

class Frame(wx.Frame):
    def __init__(self,parent,id):
        wx.Frame.__init__(self, parent, id,
                          'Read Number',
                          size = (200,150),
                          style=wx.MINIMIZE_BOX | wx.RESIZE_BORDER 
    | wx.SYSTEM_MENU | wx.CAPTION |  wx.CLOSE_BOX)
        self.initUI()

    def initUI(self):

        widgetPanel=wx.Panel(self, -1)

        Button = wx.Button(widgetPanel, -1, "Read", pos=(10,10), size=(30,30))

        self.Bind(wx.EVT_BUTTON, self.read, Button)
        Button.SetDefault()

        self.Text = wx.TextCtrl(widgetPanel, -1, "", pos=(10, 50), 
                                size =(100,30), style=wx.TE_CENTER)

        self.Text.SetFont(wx.Font(20, wx.DECORATIVE, wx.NORMAL, wx.NORMAL))

    def read(self, event):
        try:
            var = int(float(self.Text.GetValue()))
            wx.MessageDialog(self, "You entered %s"%var, "Number entered", wx.OK | wx.ICON_INFORMATION).ShowModal()
        except:
            wx.MessageDialog(self, "Enter a number", "Warning!", wx.OK | wx.ICON_WARNING).ShowModal()


if __name__ == "__main__":
    app = wx.App(False)
    frame = Frame(parent=None,id=-1)
    frame.Show()
    app.MainLoop()

答案 1 :(得分:1)

考虑使用wx.lib.intctrl.IntCtrl

它提供了一个控件,它接受并返回整数 value,并提供边界支持和可选的值限制。

答案 2 :(得分:0)

尝试

var = float(tc1.GetValue())

我不知道确切的值是什么,如果你想要施放的数字是小数或不小数,但是如果它应该有效。

此外,如果您尝试隐藏的字符串值(tc1.GetValue())为空,您也会收到此错误。