我必须使用错误的条款搜索,因为我无法找到我要找的东西。任何帮助表示赞赏。
如何写入textctrl中的特定行?
目前我的程序处理文件,处理时文件在ctrl中列出。我想要实现的是这个。在textctrl中列出文件,并在其名称后面加上文字处理。处理后,我需要重新写入相同的位置,但这次用单词done替换单词处理。我还需要记住哪个文件打印到哪一行。我正在线程化,因此文件不一定按照打开的顺序完成,因为它们的大小不同。
感谢您的帮助!
# This function opens files for processing.
def Encrypt(self, event):
"""
Runs the thread
"""
self.file2process = ""
dlg = wx.FileDialog(self, "Select files", self.file2process, "", "*.*", wx.OPEN |wx.MULTIPLE | wx.CHANGE_DIR)
if dlg.ShowModal() == wx.ID_OK:
self.file2process = dlg.GetPaths()
for fname in self.file2process:
EncryptThread(fname)
# This is one of two functions that I would need to modify but same prociple would apply to both so only including this one.
def run(self):
"""Run Worker Thread."""
# This is the code executing in the new thread.
keys = {char: chr(i) for i, char in enumerate(self.key)}
with open(self.fname,'r') as f:
with open(self.fname + '.tmp', 'w') as temp:
for data in f:
match = ''.join([keys[char] for char in data if char in keys])
temp.write(match)
os.remove(self.fname)
os.rename(self.fname + '.tmp', self.fname)
msg = self.fname
wx.CallAfter(Publisher().sendMessage, "update", msg)
# This function updates the textctrl.
def updateDisplay(self, msg):
"""
Receives data from thread and updates the display
"""
data = msg.data + "\n"
self.updateText.WriteText(data)
答案 0 :(得分:1)
听起来你混淆了两个不同的过程:一个写入TextCtrl,另一个保存和操作字符串。为了您自己的理智,您应该在GUI设计中分离出这两个过程。
我的建议是在将文件追加到TextCtrl的同时保存处理到列表的文件列表。然后,您可以使用列表推导和re
模块轻松地对该列表进行操作。所有这些添加的操作将使您的TextCtrl小部件中的文本不受干扰,就像wxPython神的意图一样。
如果你能提供一些显示你正在做什么的代码,我可以提供一些更清晰的例子。
答案 1 :(得分:0)
文本控件由字符缓冲区组织,可以包含新行而不是行可寻址 - 使用wx.Grid控件或者因为你需要记住名称位置还要记住该位置的字符数 - I会建议制作等待和完成标志相同的长度。