Windows 10下wxPython FileDialog设置默认文件名显示空白如何解决
问题原因
你遇到的默认文件名空白问题根源是Windows系统文件名规则限制:Windows不允许文件名中包含:、<、>、"、/、\、|、?、*这些特殊字符。
你当前生成默认文件名的格式是'%Y-%m-%d %H:%M:%S',其中时分秒之间的冒号属于非法字符,wxPython的文件对话框在Windows平台下检测到默认文件名包含非法字符时,会直接清空默认文件名输入框的内容,就出现了你截图里的空白情况。
小提示:即便在Linux、macOS等允许文件名带冒号的系统下,也不建议在文件名中使用冒号,避免文件跨系统传输时出现识别异常。
解决方法
只要把时间格式化字符串里的冒号替换为其他合法字符即可,比如短横线、下划线、点都可以,示例修改如下:
def OnSave(self, event): # 把冒号替换为短横线,生成合法的Windows文件名 default_file = datetime.datetime.now().strftime('%Y-%m-%d %H-%M-%S') + ".log" dlg = wx.FileDialog(self.frame, message = "Save Log Contents", defaultDir = os.getcwd(), defaultFile = default_file, wildcard = "Log files (*.log)|*.log", style = wx.FD_SAVE|wx.FD_OVERWRITE_PROMPT) if dlg.ShowModal() == wx.ID_CANCEL: dlg.Destroy() return file_path = dlg.GetPath() self.window.tc.AppendText("%s Saving log to %s\n" % (datetime.datetime.now(), file_path)) self.window.tc.SaveFile(file_path) dlg.Destroy() return True
修改后重新运行,就能看到文件对话框的文件名输入框已经自动填充了合法的时间格式文件名,用户直接点保存就能用默认名称存储文件了。
内容的提问来源于stack exchange,提问作者crj11
相关产品推荐
相关产品推荐

