从wxPython的TextCtrl框中获取整数值
我正在写一个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()