2013-09-10 2 views
1

Должно быть, я использую неправильные термины, потому что не могу найти то, что я ищу. Любая помощь оценивается.wxpython textctrl печать на определенную строку

Как написать конкретную строку внутри textctrl?

В настоящее время моя программа обрабатывает файлы, при обработке файлы перечисляются в тексте ctrl. Я бы хотел добиться этого. Перечислите файлы в textctrl с обработкой текста после его имени. При обработке мне нужно будет переписать в ту же самую позицию, но на этот раз заменить обработку слова словом. Мне также нужно запомнить, какой файл печатается на какой строке. Я использую threading, поэтому файлы не обязательно будут завершены в том порядке, в котором они были открыты, из-за их разных размеров.

Спасибо за помощь!

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

ответ

1

Похоже, вы смешиваете два разных процесса: один, который записывает в TextCtrl, и тот, который сохраняет и управляет строками. Вы должны выделить эти два процесса в графическом дизайне, для вашего собственного здравомыслия.

Мое предложение состояло в том, чтобы сохранить список файлов, обработанных в списке, одновременно с добавлением файла в TextCtrl. Вы можете легко манипулировать в этом списке, используя списки и модуль re. Все это добавленное манипулирование будет сохранять текст в виджетах TextCtrl без изменений, как это предполагали боги wxPython.

Я могу привести более ясные примеры, если вы можете предоставить код, который показывает, что вы делаете.

+0

Привет многожен, спасибо вам за помощь. Отредактированный пост, чтобы включить код. Клинтон. –

0

Текстовые элементы управления организованы символьным буфером, который может включать в себя новые строки, а не по адресу, адресуемым по прямой - либо использовать элемент управления wx.Grid, либо, поскольку вам нужно запомнить позиции имен, также помните, что количество символов в этой позиции - Я бы порекомендовал делать так, чтобы ожидания и сделанные флаги были одинаковыми.

+0

Привет, Стив. Спасибо за информацию. Я не понимал, что textctrl работал таким образом. Мне до сих пор так много нужно учиться :-) Клинтон. –

+0

Это может вызвать некоторые проблемы. –

Смежные вопросы