我在做什么
我正在 Windows 10 工作站的远程 Fedora 服务器上编写 Python 程序(前端:tkinter,后端:Python 3.6)。MobaXterm 有时会在出现异常后停止显示您键入的内容,因此我决定测试适用于 Linux 的 Windows 子系统。
简要问题描述
使用 MobaXterm 执行 GUI 时,它会启动,当从子系统执行它时,我收到“AttributeError:'NoneType' 对象没有属性 'days'”错误。
系统信息
服务器详情
NAME=Fedora
VERSION="27 (Twenty Seven)"
ID=fedora
VERSION_ID=27
PRETTY_NAME="Fedora 27 (Twenty Seven)"
ANSI_COLOR="0;34"
CPE_NAME="cpe:/o:fedoraproject:fedora:27"
HOME_URL="fedoraproject" !!!Link removed because of SPAM flag!!!
SUPPORT_URL=!!!Link removed because of SPAM flag!!!
BUG_REPORT_URL=!!!Link removed because of SPAM flag!!!
REDHAT_BUGZILLA_PRODUCT="Fedora"
REDHAT_BUGZILLA_PRODUCT_VERSION=27
REDHAT_SUPPORT_PRODUCT="Fedora"
REDHAT_SUPPORT_PRODUCT_VERSION=27
PRIVACY_POLICY_URL= !!!Link removed because of SPAM flag!!!
子系统详细信息
NAME="Ubuntu"
VERSION="18.04.2 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.2 LTS"
VERSION_ID="18.04"
HOME_URL=!!!Link removed because of SPAM flag!!!
SUPPORT_URL=!!!Link removed because of SPAM flag!!!
BUG_REPORT_URL=!!!Link removed because of SPAM flag!!!
PRIVACY_POLICY_URL=!!!Link removed because of SPAM flag!!!
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
一般信息
MobaXterm
个人版 v11.1 Build 3860
从 Fedora 服务器到 Ubuntu 子系统的 X11 转发
使用 VcXsrv(vvcxsrv-64.1.20.1.4) 完成
Windows 10 上的导出已经过测试,并且可以在其他程序上运行(使用 xeyes、firefox 和 display 进行测试)
export DISPLAY=localhost:0.0
我创建了生成问题的代码的简化版本。如果您将以下代码复制并粘贴到 python 实时终端中,它将执行。
这是一个可以更改的日历,单击日历左侧的日期可以将日期重置为当前日期。它适用于 MobaXterm,并在连接时出错
ssh -X -l username server.yourdomain.com
使用适用于 Linux 的 Windows 子系统。
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
from tkcalendar import Calendar, DateEntry
from datetime import date
# Update the dates in the date_picker variable as well as the date variable
def update_dates(date_frame_container):
date_frame_container['date_picker'].set_date(date.today())
date_frame_container['date'] = date_frame_container['date_picker'].get_date()
# Create an instance of the datepicker and place it on the tab
def setup_date_picker(date_frame_container):
calendar_style = ttk.Style(date_frame_container['frame'])
calendar_style.theme_use('clam')
date_frame_container['date_label'] = ttk.Label(
date_frame_container['frame'],
anchor='w',
text='Today: %s' % date.today().strftime('%x'))
date_frame_container['date_label'].pack(side = LEFT, anchor = 'w', fill='x')
date_frame_container['date_picker'] = DateEntry(date_frame_container['frame'])
date_frame_container['date_picker'].pack(side = RIGHT, anchor = 'e', padx = 10, pady = 10)
date_frame_container['date_label'].bind("<Button-1>", lambda e : update_dates(date_frame_container))
input_values = {'batch_file': '',
'scene_id': '',
'date_frame_container': {
'frame': '',
'date_picker': '',
'date_label': '',
'date': ''},
'lat': '',
'lon': '',
'surface_temp': ''}
master = Tk()
master.geometry('320x200')
master.option_add('*tearOff', False)
input_values['date_frame_container']['frame'] = ttk.Frame(master)
input_values['date_frame_container']['frame'].grid(row = 0, column = 1, padx = 10, pady = 10, sticky = 'e')
setup_date_picker(input_values['date_frame_container'])
错误
使用 MobaXterm 运行代码时,它可以工作。
使用 ssh 和子系统运行代码时,它不起作用,并且出现AttributeError: 'NoneType' object has no attribute 'days'
错误
完整的 Traceback 如下
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 10, in setup_date_picker
File "/usr/local/lib/python3.6/site-packages/tkcalendar/dateentry.py", line 93, in __init__
self._calendar = Calendar(self._top_cal, **kw)
File "/usr/local/lib/python3.6/site-packages/tkcalendar/calendar_.py", line 211, in __init__
self._day_names = get_day_names('abbreviated', locale=locale)
File "/usr/lib/python3.6/site-packages/babel/dates.py", line 305, in get_day_names
return Locale.parse(locale).days[context][width]
AttributeError: 'NoneType' object has no attribute 'days'
为什么会发生这种情况,我该如何解决?该程序需要在所有环境中运行(它适用于大学的研究团队,需要学生和科学家使用您能想到的所有操作系统)