使用wxpython的这个程序不运行

时间:2012-10-06 08:28:14

标签: 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.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类错了。

我应该在哪里更改?

2 个答案:

答案 0 :(得分:0)

你在代码中弄乱了几个概念:

  • Click_btn可能不应来自MainWindow,而应来自wx.Button
  • click_btn不应访问MainWindow,而应访问MainWindow的实例。
  • 最简单的解决方案是将事件处理程序实现为MainWindow的方法,并将其绑定到按钮。

我建议您阅读http://wiki.wxpython.org/Getting%20Startedhttp://www.diveintopython.net/object_oriented_framework/index.html,然后再试一次。

答案 1 :(得分:0)

您的Click_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()