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_btn可能不应该来自MainWindow,而是来自wx.Button
  • click_btn不应访问MainWindow,但应访问MainWindow.
  • 最简单的解决方案是将事件处理程序实现为方法MainWindow并将其绑定到按钮。

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

于 2012-10-06T08:48:57.613 回答
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()
于 2012-10-06T08:51:22.213 回答