在 Ubuntu 12.10 安装 wxPython

时间:2024-04-20 07:24:20

安装 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 的一个更高版本。