我正在尝试使用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()
答案 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类的结构和行为,即它已经知道如何做很多事情(比如启动,如何处理输入事件,如何在被告知时关闭等等。
你的从头开始的类没有继承任何东西 - 它没有你定义的逻辑以外的逻辑,这还不足以使它实际上“像一个窗口一样。”