gpt4 book ai didi

python - wxPython 新建、保存和另存为方法

转载 作者:太空宇宙 更新时间:2023-11-03 17:41:30 27 4
gpt4 key购买 nike

我正在使用 wxPython 为 python 应用程序编写 UI。我已经处理了一些 OnX 函数,但我需要 OnNew 和 OnSave/SaveAs 方面的帮助

这是我的保存和另存为代码:

def OnSave(self, event):
self.dirname = ""
saveFileDialog = wx.FileDialog(self, "Save Operation File", self.dirname, "",
"Operation Files (*.fwr)|*.fwr|All Files (*.*)|*.*", wx.SAVE|wx.OVERWRITE_PROMPT)
if saveFileDialog.ShowModal() == wx.ID_OK:
contents = self.control.GetValue()
self.filename = saveFileDialog.GetFilename()
self.dirname = saveFileDialog.GetDirectory()
filehandle = open(os.path.join(self.dirname, self.filename), 'w')
filehandle.write(contents)
filehandle.close()
else:
sys.exit(1)
saveFileDialog.Destroy()

def OnSaveAs(self, event):
self.dirname = "";

saveAsFileDialog = wx.FileDialog(self, "Save Operation File As", self.dirname, "",
"Operation Files (*.fwr)|*.fwr|All Files (*.*)|*.*",
wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)

if saveAsFileDialog.ShowModal() == wx.ID_OK:
contents = self.control.GetValue()
self.filename = saveFileDialog.GetFilename()
self.dirname = saveFileDialog.GetDirectory()
filehandle = open(os.path.join(self.dirname, self.filename), 'w')
filehandle.write(contents)
filehandle.close()
else:
sys.exit(1)
saveFileDialog.Destroy()

# save current contents in the file
# use wxPython output streams
#output_stream = wx.FileOutputStream(saveFileDialog.GetPath())

#if not output_stream.IsOk():
# wx.LogError("Cannot save contents of Operations File '%s'" % saveFileDialog.GetPath())
# return

底部的注释部分是我发现的另一种方法,使用输入和输出流比当前的方式更正确吗?这也是我的另一个问题,我得到了 OnNew 工作,这里是代码:

def OnNew(self,  event):
homedir = os.environ['HOME']
if not os.path.exists(homedir):
if getpass.getuser():
homedir = "C:/Users/" + getpass.getuser() + "/"
else:
homedir = "C:/"
newFileDialog = wx.FileDialog(self, "New Operation File", homedir, "",
"Operation Files (*.fwr)|*.fwr|All Files|(*.*)|*.*", wx.FD_CREATE|wx.OVERWRITE_PROMPT)

一切都很好,但 OnOpen 方法打开一个打开的文件对话框,我想要一个创建文件对话框(这与保存相同吗?有人能给我一个 OnOpen 方法示例,并让我深入了解 OnSave 和 OnSaveAs方法?正如你所看到的,共有三种方法,一种在 OnSaveAs 中,一种在 OnSave 中,一种在 OnSaveAs() 底部注释掉。还有更多我没有在这里写下来。但我的主要问题是如何使 new 的 filedialog 成为创建文件的保存对话框,而不是打开的对话框。

非常感谢。

摘要:

1) 如何调出允许创建空白文件的文件对话框。我认为它与保存类似,但我传递的任何 ID 标志总是给我一个“打开”按钮

2)至于保存方法,最好按照我在代码中显示的方式进行操作,还是使用像 SaveAs 中注释掉的部分那样的流?

最佳答案

要获取“保存”对话框,您需要将 wx.SAVE 样式标志传递给 FileDialog 对象:style=wx.SAVE 。您可以阅读有关保存标志的更多信息 herehere .

下面是一些示例代码,适用于我在 Xubuntu 14.04 上使用 wxPython 2.8.12.1 和 Python 2.7 的情况:

import os
import wx

wildcard = "Python source (*.py)|*.py|" \
"All files (*.*)|*.*"

########################################################################
class MyForm(wx.Frame):

#----------------------------------------------------------------------
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY,
"File and Folder Dialogs Tutorial")
panel = wx.Panel(self, wx.ID_ANY)
self.currentDirectory = os.getcwd()

saveFileDlgBtn = wx.Button(panel, label="Show SAVE FileDialog")
saveFileDlgBtn.Bind(wx.EVT_BUTTON, self.onSaveFile)

# put the buttons in a sizer
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(saveFileDlgBtn, 0, wx.ALL|wx.CENTER, 5)
panel.SetSizer(sizer)

#----------------------------------------------------------------------
def onSaveFile(self, event):
"""
Create and show the Save FileDialog
"""
dlg = wx.FileDialog(
self, message="Save file as ...",
defaultDir=self.currentDirectory,
defaultFile="", wildcard=wildcard, style=wx.FD_SAVE
)
if dlg.ShowModal() == wx.ID_OK:
path = dlg.GetPath()
print "You chose the following filename: %s" % path
dlg.Destroy()

#----------------------------------------------------------------------
# Run the program
if __name__ == "__main__":
app = wx.App(False)
frame = MyForm()
frame.Show()
app.MainLoop()

我不认为你的储蓄方法有什么问题。在大多数情况下,最好使用 Python 的低级运算符,而不是使用 wxPython。我会使用 Python 的 with 运算符,因为它更好地遵循新的习惯用法:

with open(os.path.join(self.dirname, self.filename), 'w') as filehandle:
filehandle.write(contents)

关于python - wxPython 新建、保存和另存为方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30483250/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com