2016-09-23 124 views
2

所以我正在編寫一個工具,它將使用基於python 3.52和Qt5的圖形用戶界面從文件中讀取時間。最小的操作PyQt5和datetime.datetime.strptime之間的衝突

​​3210

在一個孤立的環境中工作,給出輸出「1900-01-01 00:00:00」。然而,當我運行下面的小例子,

import sys 
import datetime as datetime 

from PyQt5 import QtWidgets 

if __name__ == '__main__' : 
    print(datetime.datetime.strptime('Tue', '%a')) 
    app = QtWidgets.QApplication(sys.argv) 
    print(datetime.datetime.strptime('Tue', '%a')) 
    #sys.exit(app.exec_()) 

我得到的輸出

1900-01-01 00:00:00 
Traceback (most recent call last): 
File "/home/user/gui/testfile.py", line 11, in <module> 
print(datetime.datetime.strptime('Tue', '%a')) 
File "/usr/lib/python3.5/_strptime.py", line 510, in _strptime_datetime 
tt, fraction = _strptime(data_string, format) 
File "/usr/lib/python3.5/_strptime.py", line 343, in _strptime 
(data_string, format)) 
ValueError: time data 'Tue' does not match format '%a' 

所以,到 strptime日常工作精細第一個呼叫,但創建類的QApplication之後, 它不起作用了。請注意,進一步使用 QApplication來構建GUI並執行很多複雜的事情,它工作正常。目前唯一不起作用的是 strptime

任何想法出了什麼問題?

+0

執行本地化我試過你的劇本,我無法重現,它不會崩潰這裏(3.5.1 x64,QT_VERSION_STR = 5.7.0,PYQT_VERSION_STR = 5.7,win7) – BPL

回答

1

我可以重現你的問題:調用QtWidget中,

print(datetime.datetime.strptime('Tue', '%a'))

導致錯誤之後。

如果我QtWidget

print(datetime.datetime.strptime('Die', '%a')) 這個工程後執行。

我位於瑞士,所以模具在德國相當於星期二

似乎Qt以某種方式對區域設置有影響,因爲%A和%a評估當地星期幾的名稱(Datetime)。也許一位Qt專家可以更詳細地解釋什麼是正在進行的。

+0

哇,誰會想到... –

+0

它可能會調用['setlocale(LC_ALL,'')'](https:// linux .die.net/man/3/setlocale)或在其初始化過程中的某個時間點的等價物 – mata

0

爲了詳細說明由帕特里克漂亮的答案,我現在已經找到一種方法來撤消QT

import sys 
import datetime as datetime 
import locale 

from PyQt5 import QtWidgets 

## Start the QT window 
print(datetime.datetime.strptime('Tue', '%a')) 
app = QtWidgets.QApplication(sys.argv) 
locale.setlocale(locale.LC_TIME, "en_GB.utf8") 
print(datetime.datetime.strptime('Tue', '%a')) 
#sys.exit(app.exec_()) 
+0

請注意,只有在操作系統上安裝了'en_GB.utf8'語言環境時纔會起作用,否則會引發異常。 [程序啓動時的默認](https://linux.die.net/man/3/setlocale)是'C'語言環境,因此爲了便於使用,您可能需要使用它。 – mata