我运行了以下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。
答案 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()
区域设置与系统区域设置冲突。所以在这个程序的代码中进行了修改。