WXPYTHON 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)

听起来您混淆了两个不同的过程:一个写入 TextCtrl,另一个保存和操作字符串。为了自己的理智,您应该在 GUI 设计中分离出这两个过程。

我的建议是在将文件附加到 TextCtrl 的同时将处理的文件列表保存到列表中。然后,您可以使用列表推导式和re模块非常轻松地对该列表进行操作。所有这些添加的操作将使 TextCtrl 小部件中的文本不受干扰,这是 wxPython 众神的意图。

如果您可以提供一些代码来显示您正在做的事情,我可以提供一些更清晰的示例。

文本控件由字符缓冲区组织,该缓冲区可能包含新行,而不是基于可寻址的行 - 要么使用 wx。网格控制,或者因为您需要记住名称位置,因此还要记住该位置的字符计数 - 我建议将等待和完成标志设置为相同的长度。

相关内容

  • 没有找到相关文章

最新更新