0

このプログラムでは、ボタンがクリックされたときに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クラスが間違っている可能性があります。

どこを変更すればよいですか?

4

2 に答える 2

0

コードでいくつかの概念を台無しにしました。

  • Click_btnMainWindowから派生するのではなく、 から派生する必要がありwx.Buttonます。
  • click_btnMainWindowのインスタンスにアクセスするべきではありませんMainWindow
  • 最も簡単な解決策は、イベント ハンドラーをメソッドとして実装し、MainWindowそれをボタンにバインドすることです。

http://wiki.wxpython.org/Getting%20Startedhttp://www.diveintopython.net/object_directional_framework/index.htmlを読んでから、もう一度試してみることをお勧めします。

于 2012-10-06T08:48:57.613 に答える
0

Click_btn クラスは Mainwindow クラスのサブクラスであり、それ自体とともにinitに 3 つの引数を取ります。新しい 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()
于 2012-10-06T08:51:22.213 に答える