【问题标题】:wxpython save and save as,wxpython保存并另存为,
【发布时间】:2018-11-03 05:36:04
【问题描述】:

Example image
我正在尝试解决保存选项,但我的问题是当我按下保存按钮时,如果文件不存在,它应该显示一个对话框询问路径/文件名,然后保存文件。

  • 抱歉英语不好,看图。

我希望它按如下方式工作:
1) 打开新文件并写入内容(完成)。
2)保存“如果是新文件,对话框必须显示”。
3)再次按保存“如果文件已经存在意味着对话框必须消失并且文件必须更新。

感谢和问候,
D. 维奈·辛格

def onSaveAs(self, event):
    dlg = wx.FileDialog(self, "Save to file:", ".", "", "Text (*.txt)|*.txt", wx.FD_SAVE)
    if dlg.ShowModal() == wx.ID_OK:
        i = dlg.GetFilterIndex()
        if i == 0: # Text format
            try:
                f = open(dlg.GetPath(), "w")
                print(f)
                hole = self.txt.GetValue()
                print(hole)
                f.write(hole)
            except:
                print("Hello")



def onSave(self, event):
    pathtxt = self.txt_1.GetValue()

    f = open(pathtxt,"w")
    hole_1 = self.txt.GetValue()
    f.write(hole_1)

【问题讨论】:

    标签: python file wxpython


    【解决方案1】:

    试试这个:

    import os
    
            def onSave(self, event):
                try:
                    f = open(os.path.join(self.dirname, self.filename), 'w')
                    f.write(self.control.GetValue())
                    f.close()
                except:
                    try:
                        dlg = wx.FileDialog(self, "Save to file:", ".", "", "Text (*.txt)|*.txt", wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
                        if (dlg.ShowModal() == wx.ID_OK):
                            self.filename = dlg.GetFilename()
                            self.dirname = dlg.GetDirectory()
                            f = open(os.path.join(self.dirname, self.filename), 'w')
                            f.write(self.control.GetValue())
                            f.close()
                        dlg.Destroy()
                    except:
                        pass
    
            def onSaveAs(self, event):
                try:
                    dlg = wx.FileDialog(self, "Save to file:", ".", "", "Text (*.txt)|*.txt", wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
                    if (dlg.ShowModal() == wx.ID_OK):
                        self.filename = dlg.GetFilename()
                        self.dirname = dlg.GetDirectory()
                        f = open(os.path.join(self.dirname, self.filename), 'w')
                        f.write(self.control.GetValue())
                        f.close()
                    dlg.Destroy()
                except:
                    pass
    

    注意:self.filename 和 self.dirname 需要始终启动和跟踪。

    【讨论】:

    • 您好 altarawy 感谢您提供答案,但我正在更新我的内容并添加了一张图片。你的解决方案没有解决我的问题。谢谢你有美好的一天
    • 在你使用代码之前,在你的__init__中分配self.filename = '' and self.dirname = ''并导入os
    • @altarawy 我赞成您的答案,但您确实需要在两个对话框的末尾设置 self.filename 并可能在答案中添加注释 self.filename 需要在以下位置启动和跟踪任何时候。
    【解决方案2】:

    试试这样的:
    注意:我还没有测试过

    def onSave(self, event):
        pathtxt = self.txt_1.GetValue()
        if pathtxt != "":
            if not pathtxt.endswith('.txt'):
                pathtxt=pathtxt+'.txt'
    
        try:
            with open(pathtxt, 'w') as f:
                f.write(self.txt.GetValue())
        except:
            try:
                dlg = wx.FileDialog(self, "Save to file:", ".", "", "Text (*.txt)|*.txt", wx.FD_SAVE)
                if dlg.ShowModal() == wx.ID_OK:
                    i = dlg.GetFilterIndex()
                    if i == 0: # Text format
                        try:
                            with open(dlg.GetPath(), 'w') as f:
                                f.write(self.txt.GetValue())
                        except:
                            print("Save failed")
                    else:
                        print("Save failed - Use .txt file suffix")
            except:
                print("Save failed - Unknown reason")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      • 2015-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      相关资源
      最近更新 更多