wx.Image正在抛出PyAssertionError

时间:2015-11-03 17:53:39

标签: python python-2.7 wxpython wxwidgets

我运行了以下python代码

import wx

class myframe(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, -1, title="Hello")
        self.InitUI()

    def InitUI(self):

        menubar = wx.MenuBar()
        fileMenu = wx.Menu()
        qmi = wx.MenuItem(fileMenu, 100, '&Quit\tCtrl+Q')
        qmi.SetBitmap(wx.Image('quit.png', wx.BITMAP_TYPE_ANY).ConvertToBitmap())
        fileMenu.AppendItem(qmi)

        self.Bind(wx.EVT_MENU, self.OnQuit, id=100)

        menubar.Append(fileMenu, '&File')
        self.SetMenuBar(menubar)

        self.SetSize((250, 200))
        self.SetTitle('Icons and shortcuts')
        self.Centre()
        self.Show(True)

    def OnQuit(self, e):
        self.Close()

def main():
    ex = wx.App()
    myframe()
    ex.MainLoop()

if __name__ == '__main__':
    main()

以上代码抛出了消息

qmi.SetBitmap(wx.Image('quit.png', wx.BITMAP_TYPE_ANY).ConvertToBitmap())
  File "C:\Python27\lib\site-packages\wx-3.0-msw\wx\_core.py", line 2882, in __init__
    _core_.Image_swiginit(self,_core_.new_Image(*args, **kwargs))
PyAssertionError: C++ assertion "strcmp(setlocale(LC_ALL, NULL), "C") == 0" failed at ..\..\src\common\intl.cpp(1449) in wxLocale::GetInfo(): You probably called setlocale() directly instead of using wxLocale and now there is a mismatch between C/C++ and Windows locale.
Things are going to break, please only change locale by creating wxLocale objects to avoid this!

我是python的新手,完全无法解决这个问题。 无论如何都有找到解决方案。

我在windows机器中使用python 2.7.10和wxpython 3.0.2.0。

2 个答案:

答案 0 :(得分:1)

我有一个类似的问题,只发生在使用wxPhoenix的cxFreeze之后。我担心上面的解决方案可能导致问题不是wx.LANGUAGE_ENGLISH,所以我在任何导入之前记录了语言环境(我怀疑它正在改变语言环境):

import wx
locale = wx.Locale.GetSystemLanguage()

然后在导入后和创建应用后重置它:

app = wx.App(redirect=False)
app.locale = wx.Locale(locale)

这对我有用。

答案 1 :(得分:0)

解决方案是修改语言环境,它正在运行。 修改了代码:

def main():
    ex = wx.App()
    ex.locale = wx.Locale(wx.LANGUAGE_ENGLISH)
    myframe()
    ex.MainLoop()

区域设置与系统区域设置冲突。所以在这个程序的代码中进行了修改。