为什么我无法在wxpython面板中打印静态文本
这是我的代码
import wx
class justin(wx.Frame):
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id,'frame', size=(800, 500))
panel=wx.Panel(self)
panel.SetBackgroundColour("red")
self.box1=wx.TextCtrl(panel, -1, "type number")
self.box2=wx.TextCtrl(panel, -1, "type number")
self.box1.SetBackgroundColour("gray")
self.box2.SetBackgroundColour("gray")
siz=wx.BoxSizer(wx.VERTICAL)
siz.Add(self.box1, 1)
siz.Add(self.box2, 1)
panel.SetSizer(siz)
button=wx.Button(panel, label="enter", pos=(250, 200), size=(100, 50))
self.Bind(wx.EVT_BUTTON, self.yesitstrue, button)
def yesitstrue(self, event):
a=(float(self.box1.GetValue()))
b=(float(self.box2.GetValue()))
answer = a+b
wx.StaticText(self.panel,id, answer, pos=(200, 100))
if __name__=='__main__':
app=wx.PySimpleApp()
frame=justin(parent=None, id=-1)
frame.Show()
app.MainLoop()
我想做的是从两个文本框里获取文字,然后把它们加起来,最后以图形界面的形式打印出来。当程序运行到静态文本那部分时,它提示面板不存在。如果发现其他问题,也请告诉我,因为我真的很需要帮助。
1 个回答
0
你的代码有几个问题:
panel
: 出现“panel
不存在”的错误是因为在你的代码中,panel
是__init__
方法里的一个变量,而在yesitstrue
方法中这个变量就不再可用了。要解决这个问题,你需要在__init__
方法中把它设置为实例属性,像这样:self.panel = panel
。这样之后,你就可以在yesitstrue
方法中用self.panel
来访问它,就像你现在尝试做的那样。id
:nex_StaticText
期望的第二个参数是int
类型,这意味着你传入的第二个参数id
不是它所期望的类型。需要注意的是,id
是Python内置的一个函数,这就是导致问题的原因。解决方法和panel
类似:把id
作为实例属性来赋值,像这样:self.id = id
。之后,调用wx.StaticText
时用self.id
而不是直接用id
。answer
: 需要字符串或unicode类型意味着你传入的东西并不是真正的文本。在代码中,a
和b
被转换成了float
类型,而answer
是它们的和,因此answer
也是float
类型。要解决这个问题,把answer
转换成字符串,使用str
,然后用wx.StaticText
调用str(answer)
。