继承,Python和wxWidget

时间:2012-02-27 14:01:55

标签: python inheritance wxpython

我正在尝试使用Python来创建GUI。我已经下载了wxPython并创建了一个“hello world”窗口。但是,我发现我的代码与其他代码示例略有不同。特别是,当其他示例想要创建GUI时,它们从wx库继承,而我没有,那么我的类和其他类之间有什么区别?

我的源代码:

import wx
class Window ():
    def init (self, parent, id, windowname):
        mywindow = wx.Frame (parent, id, windowname)
        mywindow.Show(True)
        return True 

app = wx.App(False)
wind = Window()
wind.init(None, wx.ID_ANY, "windowname")
t.oninit("Hello World" , "watch")
app.MainLoop()

书中的示例源代码:

import wx
class App(wx.App):
    def OnInit(self):
        frame = wx.Frame(parent=None, title='Bare')
        frame.Show()
        return True

app = App()
app.MainLoop()

3 个答案:

答案 0 :(得分:2)

这是正确的方法:

import wx
class Window(wx.Frame):
    def __init__ (self, parent, id, windowname):
        mywindow = wx.Frame (parent, id, windowname)
        mywindow.Show(True)


app = wx.App(False)
wind = Window(None, -1, "windowname")
app.MainLoop()

正如其他人所说,命名类实例“Window”意味着什么。你必须从wx.Frame继承子类才能做到这一点。事实上,我不会称之为“Window”,因为实际上有一个名为“wx.Window”的更高级别的小部件可能会让你后来感到困惑。

您应该浏览zetcode wxPython教程:http://zetcode.com/wxpython/并查看wxPython演示,wiki或我的博客中的一些示例:http://www.blog.pythonlibrary.org/

您还应该添加一个wx.Panel实例作为框架的唯一子项,以使其在所有系统上看起来正确并在窗口小部件之间启用Tab键。

答案 1 :(得分:1)

wx.App类有一个名为OnInit()的方法,在初始化应用程序时调用该方法。第二个代码块使用自定义代码覆盖该方法,即显示框架的代码。

您的代码不会这样做,这可能是您遇到问题的原因。

答案 2 :(得分:1)

将其称为窗口并不能成为一个窗口!

通过继承wx类,您可以获得所有预先存在的功能 - 在该示例中,App类继承了所有wx.App类的结构和行为,即它已经知道如何做很多事情(比如启动,如何处理输入事件,如何在被告知时关闭等等。

你的从头开始的类没有继承任何东西 - 它没有你定义的逻辑以外的逻辑,这还不足以使它实际上“像一个窗口一样。”