我正在尝试从用户那里接收输入(通过使用wx.Choice),然后根据该数字,编辑一个.py文件,根据所选数字编辑每个类的内容
我有一个使用wxpython设置的GUI,它具有三个选项。一个带有数字1-5的下拉菜单,一个标题文本框和一个主体多行文本框。选择数字,键入标题和键入正文时,我可以成功地将类写入文件,但是如果选择新的数字,它将用GUI中的新文本覆盖已写入文本文件的ive。
这是文本面板和框:
self.numberChoices = ['1', '2', '3', '4', '5']
qnNumber_label = wx.StaticText(panel, label="Quicknote Number:", pos=(20, 30))
self.number_Control = wx.Choice(panel, pos=(140, 30), size=(50, -1), choices=self.numberChoices)
widgets.append(qnNumber_label)
widgets.append(self.number_Control)
# Quicknote title text panel creation
qnTitle_label = wx.StaticText(panel, label='Quicknote Title:', pos=(20, 60))
self.title_Control = wx.TextCtrl(panel, pos=(140, 60))
widgets.append(qnTitle_label)
widgets.append(self.title_Control)
# Quicknote body text panel creation
qnBody_label = wx.StaticText(panel, label='Quicknote Text:', pos=(20, 90))
self.body_Control = wx.TextCtrl(panel, style=wx.TE_MULTILINE, pos=(140, 90), size=(300, 200))
widgets.append(qnBody_label)
widgets.append(self.body_Control)
点击保存按钮时,它们将在此处被调用和写入:
quicknoteNumber = "class QN%s():" % self.number_Control.GetSelection()
quicknoteTitle = "\ttitle = '%s'" % self.title_Control.GetValue()
quicknoteBody = "\tnote = %s\n" % self.body_Control.GetValue().split("#")
ret = [quicknoteNumber, quicknoteTitle, quicknoteBody]
print ("\n".join(ret))
# print(ret)
file = open('config.py', 'w')
file.write("\n".join(ret))
file.close()
confirmation_text = 'Your quicknote was updated successfully!'
dlg = wx.MessageDialog(self, confirmation_text, 'Success', wx.OK) # wx.OK|wx.ICON_INFORMATION
result = dlg.ShowModal()
dlg.Destroy()
这是预期的结果:
class QN0():
title = 'title'
note = ['a line of notes\nanother line of notes\none last line of notes']
class QN1():
title = 'title'
note = ['a line of notes\nanother line of notes\none last line of notes']
但是,相反,当我从下拉列表中选择一个新数字时,它将替换我先前写入文件的内容。理想情况下,id喜欢覆盖相同编号的类,因为这是Quicknotes的编辑GUI。 (例如,如果已经存在QN0类,那么当我从下拉列表中选择QN0时,它将编辑QN0类,而不是第二次重写它。)
答案 0 :(得分:0)
如评论中所述,您必须使用“ a + ”(用于附加)选项而不是“ w ”打开文件。
例如:
f=open("config.py", "a+")
现在,您可以编写任何内容,它将被添加到文件的末尾:
f.write("Appended line!!!")
更多信息:
https://www.guru99.com/reading-and-writing-files-in-python.html#2
编辑:
阅读您的最后一条评论,尝试阅读整个内容,对其进行处理(例如,使用正则表达式删除您想要的内容),然后再次将其完整写入。
致谢。