为什么我不能使用wxpython在我的面板中打印静态文本

时间:2011-12-21 02:04:11

标签: python 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()

我要做的是从两个文本框中获取文本并添加它然后以GUI格式打印。当程序到达静态文本的部分时,它表示面板不存在。 如果发现任何其他错误,我想要任何帮助,请告诉我,因为我真的需要它。

1 个答案:

答案 0 :(得分:0)

您的代码存在一些问题:

  • panelpanel不存在错误是因为在您的代码中,__init__方法中的变量在yesitstrue中不再可用} 方法。要解决此问题,您必须在__init__方法中将其指定为实例属性,如下所示:self.panel = panel。之后,您将能够使用yesitstrue方法使用self.panel访问它,因为您已经尝试过了。

  • id:类型nex_StaticText的{​​{1}}预期参数2表示第二个参数int不是预期类型。请注意id是一个python内置函数,这就是导致问题的原因。该解决方案类似于id的解决方案:将panel参数指定为实例属性,如下所示:id。之后,使用self.id = id而不是wx.StaticText致电self.id

  • id:所需的字符串或unicode类型意味着您传递的内容并非真正的文本。在代码中,answera转换为b,答案就是它们的总和。因此,它也是float。要解决此问题,请使用floatanswert转换为字符串,然后使用str

  • 致电wx.StaticText