wxpython小程序的问题

wxpython小程序的问题

写第一个例子,但是按着书上的代码写了,可是不对。有问题,并没有菜单。谁帮我看一下。

#!/usr/bin/python
#filename = wx3.py
from wxPython.wx import *
ID_ABOUT = 101
ID_EXIT = 102
class MyFrame(wxFrame):
    def _init_(self,parent,ID,title):
        wxFrame._init_(self,parent,ID,title,wxDefaultPosition,wxSize(200,150))
        self.CreateStatusBar()
        self.SetSatusText("This is the statusbar")
        menu = wxMenu()
        menu.Append(ID_ABOUT,"&About","More information about this program")
        menu.AppendSeparator()
        menu.Append(ID_EXIT,"&Exit","Terminate the program")
        menuBar = wxMenuBar()
        menuBar.Append(menu,"&File")
        self.SetMenuBar(menuBar)     
class MyApp(wxApp):
    def OnInit(self):
        frame = MyFrame(NULL, -1, "Hello from wxPython")
        frame.Show(true)
        self.SetTopWindow(frame)
        return true
app = MyApp(0)
app.MainLoop()

建议你找一本叫wxPython in action的书,然后照上面的例子去试验。
不要用wxPython.wx了
新的版本要求是直接使用wx import
这样:
import wx

class myFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)
....
....


其他自己看wxPython in action
在耗费了一个多小时,终于找到了楼主问题所在之后,我只想给楼主一个建议:

请在学习wxpython之前,再好好学习一下python的class吧。

因为当我发现函数名是'_init_' 而不是 '__init__'的时候,我真的很想发火   
你们是怎么调的程序呀?我这里还是有问题,class里的类中是__init__但是我这样写程序也不对,还是有错误。我是在window下写的.py文件。
>>>
Traceback (most recent call last):
  File "D:\文档\python\wxpython\wx3.py", line 24, in <module>
    app = MyApp(0)
  File "D:\Program Files\python\lib\site-packages\wx-2.8-msw-unicode\wx\_core.py", line 7757, in __init__
    self._BootstrapApp()
  File "D:\Program Files\python\lib\site-packages\wx-2.8-msw-unicode\wx\_core.py", line 7354, in _BootstrapApp
    return _core_.PyApp__BootstrapApp(*args, **kwargs)
  File "D:\文档\python\wxpython\wx3.py", line 20, in OnInit
    frame = MyFrame(NULL, -1, "Hello from wxPython")
  File "D:\文档\python\wxpython\wx3.py", line 10, in __init__
    self.SetSatusText("This is the statusbar")
AttributeError: 'MyFrame' object has no attribute 'SetSatusText'
>>>
几个明显的错误:
1. 是"SetStatusText", 不是"SetSatusText"
2. 参数是"None", 不是"NULL"
3. 布尔值是"True", 不是"true"

几个可以改进的地方:
1. 目前的wxpython的写法是'wx.XXX', 不是'wxXXX'
2. 变量ID改成小写, 因为通常大写的都被当成常量对待,而且和别的小写变量格格不入

此外,调试时的几点:
1. 查看出错信息。 你的出错信息已经很明确了“没有'SetSatusText'”, 说明没有这个东东,很可能是因为你拼写错了,比如大小写问题
2. 如果是书上的例子,可以拿自己的和书上的copy下来的版本用diff比较一下。 windows下也有diff工具,你可以去找一下

我拿你的代码修改后的版本,在linux下运行通过(可能改动比较大):

#!/usr/bin/python

#filename = wx3.py

import wx

ID_ABOUT = 101
ID_EXIT = 102

class MyFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, size=(200,150))

        menuBar = wx.MenuBar()
        self.SetMenuBar(menuBar)

        menu = wx.Menu()
        menu.Append(ID_ABOUT,"&About","More information about this program")
        menu.AppendSeparator()
        menu.Append(ID_EXIT,"&Exit","Terminate the program")

        menuBar.Append(menu,"&File")

        self.CreateStatusBar()
        self.SetStatusText("This is the statusbar")

class MyApp(wx.App):
    def OnInit(self):
        frame = MyFrame(None, -1, "Hello from wxPython")
        frame.Show(True)
        self.SetTopWindow(frame)
        return True

if __name__ == '__main__':
        app = MyApp(0)
        app.MainLoop()


现在有Tkinter和wx应该学那个那?有没有中文版本的资料呀?
关于Tkinter和wxPython以及PyQt以及PyGTK等等的区别与建议,你可以用baidu或google搜索得到

我较少看中文的资料,你需要的话也可以去搜索。刚才无意中发现了两个不错的网址供参考:
wxpython: http://www.pythontik.com/blog/default.asp?tag=wxPython
Tkinter: http://www.pythontik.com/blog/default.asp?tag=Tkinter