代码之家  ›  专栏  ›  技术社区  ›  Person

断言错误WxPython

  •  0
  • Person  · 技术社区  · 6 年前

    我有以下代码:

    import wx
    
    class application(wx.Frame):
    
        def __init__(self, *args, **kw):
            super(application, self).__init__(*args, **kw)
            panel = wx.Panel(self)
            # Header
            Header = wx.StaticText(panel, label="Browse", pos=(25, 25))
            HeaderFont = Header.GetFont()
            HeaderFont.PointSize += 10
            HeaderFont = HeaderFont.Bold()
            Header.SetFont(HeaderFont)
            # displaying everything in 'override_contents.py'
            from override_contents import contents
            posx = 25
            posy = 60
            change = 0
            def contentButtonDisplay(panel=panel, id=wx.ID_ANY, label="None", pos=(0,0), event=None, i=None):
                wx.Button(panel, id, label, pos).Bind(wx.EVT_BUTTON, event)
            for i in contents:
                contentButtonDisplay(label=i["name"], pos=(posx, posy), event=i["event"])
                if change == 5:
                    posy += 50
                    posx = 0
                    change = 0
                else:
                    posx += len(i) * 10
                    change += 1
    
    app = wx.App()
    frm = application(None, title='Browse')
    frm.Show()
    app.MainLoop()
    

    override_contents :

    contents=[
        {
            "name" : "PyGame",
            "event": "print('Hello!')"
        }
    ]
    

    当我运行它时

    Traceback (most recent call last):
      File "C:/Users/???'s Coding/PycharmProjects/Interface/browse.py", line 32, in <module>
        frm = application(None, title='Browse')
      File "C:/Users/???'s Coding/PycharmProjects/Interface/browse.py", line 22, in __init__
        contentButtonDisplay(label=i["name"], pos=(posx, posy), event=i["event"])
      File "C:/Users/???'s Coding/PycharmProjects/Interface/browse.py", line 20, in contentButtonDisplay
        i.Bind(wx.EVT_BUTTON, event)
      File "C:\Users\???'s Coding\Desktop\Python Intall Directory\lib\site-packages\wx\core.py", line 1350, in _EvtHandler_Bind
        assert callable(handler) or handler is None
    AssertionError
    

    正如守则所述,它将成为一个媒体共享平台。
    当我打电话给 .Bind .
    有人能帮我和克拉里夫一下吗?
    谢谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   Person    6 年前

    结果我犯了个新手错误
    在里面 override_contents 我传递了一个字符串而不是代码。
    我所要做的就是:

    import wx
    def onPygame():
        wx.MessageBox("Pygame!", "Pygame!")
    # ...
    "event": lambda _: onPygame
    # ...
    

    所以,是的。新手失误。