安装 wxPython 可以使用 pip 工具,但在 Ubuntu 12.10 上需要首先安装 wxPython 的依赖项。请注意,Ubuntu 12.10 已于2013年终止支持,建议升级到更高版本的 Ubuntu。以下是在 Ubuntu 12.10 上安装 wxPython 的一般步骤:
一、问题背景
在 Ubuntu 12.10 安装 wxPython 时遇到困难,尝试了网站上给出的所有答案都无济于事。在尝试了 http://wxpython.org/BUILD.html 之后,得知它已经在仓库中,于是运行 “sudo apt-get install install python-wxgtk2.8” 安装,但安装成功后仍然无法使用。并且,虽然它可以在使用 PyDev 的 Eclipse 中工作,但是在关闭应用程序后会收到 “LIBDBUSMENU-GLIB-WARNING **: Trying to remove a child that doesn’t believe we’re it’s parent.”" 警告,而且状态栏也无法正常工作。
遇到了如下代码问题:
import wx
class naman(wx.Frame):
def __init__(self,parent,id): # @ReservedAssignment
wx.Frame.__init__(self,parent,id,'Frame aka Window', size=(300,200))
panel=wx.Panel(self)
statusbar=self.CreateStatusBar()
menubar=wx.MenuBar()
first=wx.Menu()
second=wx.Menu()
first.Append(wx.NewId(),"New Window", "This opens a new window")
first.Append(wx.NewId(),"Open...", "This will open")
second.Append(wx.NewId(),"Undo", "This will undo")
second.Append(wx.NewId(),"Redo", "This will redo")
menubar.Append(first,"File")
menubar.Append(second,"Edit")
self.SetMenuBar(menubar)
if __name__=='__main__':
app=wx.PySimpleApp()
frame=naman(parent=None,id=-1)
frame.Show()
app.MainLoop()
想知道为什么会出现这个警告,为什么状态栏无法正常工作,以便在 Eclipse 中继续工作而无需担心 wxPython。
二、解决方案
1、安装 wxPython Phoenix,而不是 wxPython 2.8。2.8 系列和 2.9 Classic 系列仅与 Python 2.x 兼容。需要下载一个 Phoenix 快照进行构建,因为它是唯一与 Python 3 兼容的版本。可以从此处获取:
http://wxpython.org/Phoenix/snapshot-builds/
2、注意,Phoenix 处于非常不成熟的测试阶段,目前仅支持核心控件。大多数自定义控件,例如 wx.lib 中的控件,仍在移植中。有关详细信息,请参阅 http://wiki.wxpython.org/ProjectPhoenix。
3、然后,对代码进行修改:
import wx
import wx.lib.agw.aui as aui
class naman(wx.Frame):
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id,'Frame aka Window', size=(300,200))
panel=wx.Panel(self)
self.auiManager = aui.AuiManager(self)
self.auiManager.SetManagedWindow(self)
self.auiNotebook = aui.AuiNotebook(self, agwStyle=aui.AUI_NB_DEFAULT_STYLE | aui.AUI_NB_TAB_EXTERNAL_MOVE | aui.AUI_NB_TAB_MOVE)
self.auiManager.AddPane(self.auiNotebook, aui.AuiPaneInfo().Name("Main").CenterPane())
statusbar=self.CreateStatusBar()
menubar=wx.MenuBar()
first=wx.Menu()
second=wx.Menu()
first.Append(wx.NewId(),"New Window", "This opens a new window")
first.Append(wx.NewId(),"Open...", "This will open")
second.Append(wx.NewId(),"Undo", "This will undo")
second.Append(wx.NewId(),"Redo", "This will redo")
menubar.Append(first,"File")
menubar.Append(second,"Edit")
self.SetMenuBar(menubar)
if __name__=='__main__':
app=wx.PySimpleApp()
frame=naman(parent=None,id=-1)
frame.Show()
app.MainLoop()
4、运行代码:
python naman.py
即可解决该问题。
请注意,由于 Ubuntu 12.10 已不再支持,因此某些依赖项可能无法安装或者可能会出现其他问题。如果你遇到困难,建议考虑升级到 Ubuntu 的一个更高版本。