此程序使用wxpython don';跑不动

此程序使用wxpython don';跑不动,python,wxpython,Python,Wxpython,这个程序是当点击按钮时,wx.textctrl被写为“点击” 它不跑了 import wx class Mainwindow(wx.Frame): def __init__(self, parent, id, title): wx.Frame.__init__(self, parent, id, title, size=(300, 300)) panel = wx.Panel(self, -1) vbox = wx.BoxSizer(

这个程序是当点击按钮时,wx.textctrl被写为“点击”

它不跑了

import wx

class Mainwindow(wx.Frame):

    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(300, 300))
        panel = wx.Panel(self, -1)

        vbox = wx.BoxSizer(wx.VERTICAL)

        hbox1 = wx.BoxSizer(wx.HORIZONTAL)
        btn = wx.Button(panel, -1, 'OK', size=(70, 30))
        button = Click_btn()
        btn.Bind(wx.EVT_BUTTON, button.click_btn)
        hbox1.Add(btn, 0)
        vbox.Add(hbox1, 0)

        hbox2 = wx.BoxSizer(wx.HORIZONTAL) 
        self.tc = wx.TextCtrl(panel, -1, style=wx.TE_MULTILINE)
        hbox2.Add(self.tc, 1, wx.EXPAND) 
        vbox.Add(hbox2, 1, wx.EXPAND)

        panel.SetSizer(vbox)

        self.Centre()
        self.Show(True)

class Click_btn(Mainwindow):
    def click_btn(self, event):
        Mainwindow.tc.WriteText("clicked\n")

if __name__=="__main__":
    app = wx.App()
    Mainwindow(None, -1, u"sample")
    app.MainLoop()
错误面板立即消失

可能是Click_btn类错误


我应该在哪里更改?

您的代码中有几个概念弄乱了:

  • 单击\u btn
    可能不应从
    主窗口
    派生,而应从
    wx.按钮
    派生
  • click\u btn
    不应访问
    main窗口
    ,而应访问
    main窗口
    的实例
  • 最简单的解决方案是将事件处理程序实现为
    MainWindow
    的方法,并将其绑定到按钮

我建议先读一遍,然后再试一次。

您的Click\u btn类是Mainwindow类的一个子类,它本身带有3个参数到init。创建新的Click_btn时,您没有传递任何参数

在自己的类中使用click_btn没有任何意义;将其移动到Mainwindow类。以下方面应起作用:

import wx

class Mainwindow(wx.Frame):

    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(300, 300))
        panel = wx.Panel(self, -1)

        vbox = wx.BoxSizer(wx.VERTICAL)

        hbox1 = wx.BoxSizer(wx.HORIZONTAL)
        btn = wx.Button(panel, -1, 'OK', size=(70, 30))
        btn.Bind(wx.EVT_BUTTON, self.click_btn)
        hbox1.Add(btn, 0)
        vbox.Add(hbox1, 0)

        hbox2 = wx.BoxSizer(wx.HORIZONTAL) 
        self.tc = wx.TextCtrl(panel, -1, style=wx.TE_MULTILINE)
        hbox2.Add(self.tc, 1, wx.EXPAND) 
        vbox.Add(hbox2, 1, wx.EXPAND)

        panel.SetSizer(vbox)

        self.Centre()
        self.Show(True)

    def click_btn(self, event):
        self.tc.WriteText("clicked\n")


if __name__=="__main__":
    app = wx.App()
    Mainwindow(None, -1, u"sample")
    app.MainLoop()