2014-01-29 32 views
4

我有與wxPython的wxpython 3.0打破舊應用程序? (區域設置錯誤)

與wxPython的3.0,

現在的老verions正常運行的應用試圖運行應用程序時,我收到以下錯誤

File "C:\Python27\lib\site-packages\wx-3.0-msw\wx\_controls.py", line 6523, in __init__ 
    _controls_.DatePickerCtrl_swiginit(self,_controls_.new_DatePickerCtrl(*args, **kwargs)) 
wx._core.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! 

的錯誤出現從該行

File "C:\Users\hadi\Dropbox\Projects\Python\dialysis\profile.py", line 159, in __init__ 
    style=wx.DP_DROPDOWN) 

幫助深表感謝

+0

你可以顯示相關代碼來創建'wx.DatePickerCtrl'嗎? – Fenikso

+0

self.date1 = wx.DatePickerCtrl(self,size =( - 1,-1), style = wx.DP_DROPDOWN) – Hadi

+1

嗯。這對我行得通。除了這個例外,你真的做了一些Locale魔法嗎?你可以創建儘可能小的可運行示例,我們可以使用它並運行以重現您的問題?順便說一句:你可以省略'size =( - 1,-1)',因爲這是隱式值和可選參數。 – Fenikso

回答

14

我知道它已經有一段時間,因爲這個問題被問,但我只是有同樣的問題,並認爲我會添加我的解決方案,以防其他人發現此線程。基本上發生的事情是腳本的語言環境與機器的語言環境有某些衝突,儘管我不知道如何或爲什麼。也許別人有更具體的知識,在這可以填補在嘗試手動設置使用的wxPython對象wx.Locale的語言環境。

locale = wx.Locale(wx.LANGUAGE_ENGLISH)

但是,請確保您的輸出分配給非本地變量。只要變量超出範圍,Locale對象就會被破壞。所以,如果它在一個類:

class MyApp(wx.App): ... def OnInit(self): self.locale = wx.Locale(wx.LANGUAGE_ENGLISH) ...

0

我剛剛遇到的同類問題。 看來,我們需要使用wx.App之前設置的語言環境:

import locale 
locale.setlocale(locale.LC_ALL, 'C') 

兩個鏈接幫助我解決這個問題:

我原來的錯誤信息:

0在Python一樣
..\..\src\common\intl.cpp(1449): assert "strcmp(setlocale(LC_ALL, NULL), "C")==0" failed in wxLocale::GetInfo() ... 
相關問題