【问题标题】:wxpython textctrl printing to a specific linewxpython textctrl 打印到特定行
【发布时间】:2013-09-14 13:45:55
【问题描述】:

我一定是用错误的术语在谷歌上搜索,因为我找不到我要找的东西。任何帮助表示赞赏。

如何写入 textctrl 中的特定行?

目前我的程序处理文件,处理后文件列在文本 ctrl 中。我想要达到的就是这个。列出 textctrl 中的文件,并在其名称后进行文字处理。处理后,我需要重新写入完全相同的位置,但这次用完成的单词替换文字处理。我还需要记住哪个文件打印在哪一行。我正在线程化,因此文件不一定按照打开的顺序完成,因为它们的大小不同。

感谢您的帮助!

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

【问题讨论】:

    标签: python wxpython textctrl


    【解决方案1】:

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

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

    如果你能提供一些代码来说明你在做什么,我可以提供一些更清晰的例子。

    【讨论】:

    • 您好 multiphrenic,感谢您的帮助。已编辑帖子现在包含代码。克林顿。
    【解决方案2】:

    文本控件由一个字符缓冲区组织,该缓冲区可能包含新行而不是基于行可寻址 - 要么使用 wx.Grid 控件,要么因为您需要记住名称位置,所以还要记住该位置的字符数 - 我建议让等待和完成标志的长度相同。

    【讨论】:

    • 嗨史蒂夫。谢谢(你的)信息。我没有意识到 textctrl 以这种方式工作。我还有很多东西要学 :-) 克林顿。
    • 这样会导致一些问题。
    猜你喜欢
    • 1970-01-01
    • 2011-07-12
    • 2013-05-12
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 2018-03-01
    相关资源
    最近更新 更多