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

#python-3.x #tkinter

#python-3.x #tkinter

Вопрос:

Создавая более простую версию python в python, я хочу иметь возможность печатать текст между двумя символами в строке из текстового поля

Я пробовал код, подобный shell.get("1.7", '"') но я получаю сообщение об ошибке _tkinter.TclError: bad text index """ Вот фрагмент моего текущего кода:

 from tkinter import *
import datetime

def run():
    print("File run "   str(datetime.datetime.now()))
    line = shell.get("1.0", END)
    #dont worry about ^ line for now (line 2 in run())
    if 'print "' in line:
        print (shell.get('1.7', '"'))

shell = ScrolledText(root, width=167, height=42)
shell.grid(column=0, row=1)
  

Вот что находится в оболочке
print "Hello World"

Я просто хочу что-то вроде: print (shell.get(1.7, "<nearest quotation mark>")

Ответ №1:

Текстовый виджет tkinter имеет search метод, который вы можете использовать, чтобы найти первое вхождение шаблона, начинающееся с индекса.

В вашем случае вы хотели бы найти первый " после 1.7 индекса. Для этого вы можете запустить:

 shell.search('"', '1.7')
  

Интегрированный в ваш код, который был бы:

 from tkinter import *
from tkinter.scrolledtext import ScrolledText
import datetime

def run(event=None):
    print('File run '   str(datetime.datetime.now()))
    line = shell.get("1.0", END)
    if 'print "' in line:
        print (shell.get('1.7', shell.search('"', '1.7')))

        
root = Tk()        
shell = ScrolledText(root, width=167, height=42)
shell.insert('1.0', 'print "print this" do not print this')
shell.grid(column=0, row=1)
shell.bind('<Button-1>', run)
root.mainloop()
  

Обратите внимание, что я привязал run функцию к левой кнопке мыши в демонстрационных целях.

Комментарии:

1. СПАСИБО!!!! Это, вероятно, самый продуктивный момент в этом проекте. Это сработало, и это потрясающе.