为什么我无法在wxpython面板中打印静态文本

0 投票
1 回答
1113 浏览
提问于 2025-04-17 08:45

这是我的代码

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类型意味着你传入的东西并不是真正的文本。在代码中,ab被转换成了float类型,而answer是它们的和,因此answer也是float类型。要解决这个问题,把answer转换成字符串,使用str,然后用wx.StaticText调用str(answer)

撰写回答