从wxPython的TextCtrl框中获取整数值

0 投票
3 回答
3037 浏览
提问于 2025-04-18 11:43

我正在写一个wx应用程序,想把用户在文本框里输入的值当作函数的参数来用。但是这不太奏效,我开始怀疑是不是因为这些值没有被正确读取。我有一个窗口,里面有一些这样的文本框,我用GetValue()这个函数来获取它们的值,像这样:

var = tc1.GetValue()

但是在后面的代码中出现了错误,因为这些值没有被当作整数来处理,实际上它们应该是整数。我试着用这一行代码来修正这个问题:

var = int(tc1.GetValue())

结果却出现了错误信息:“值错误:无效的字面量,无法转换为整数”。我完全不知道这是什么意思。

我该怎么办呢?

3 个回答

0

尝试一下

var = float(tc1.GetValue())

我不知道你要转换的具体数值是什么,如果你要转换的数字是小数的话,这个方法应该有效。

另外,如果你要转换的字符串值(tc1.GetValue())是空的,你也会遇到这个错误。

1

可以考虑使用 wx.lib.intctrl.IntCtrl

这个控件可以接收和返回整数值,并且支持设置范围和可选的数值限制。

3

如果你试图把一个不是整数的字符串,或者是一个小数的字符串转换成整数,就会出现这个错误。最好的办法是使用一个 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()

撰写回答