Tkinter-Text: сделать так, чтобы текстовое поле распознавало несколько строк как отдельные входы? - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь создать программу, которая принимает пользовательский ввод и модифицирует его (пользовательским вводом будут различные строки из 10 цифр), а затем возвращает измененный результат. В настоящее время я могу достичь того, что хочу, с помощью одной строки ввода, но я хотел бы добавить функциональность, позволяющую пользователю вводить несколько входов, и чтобы программа изменяла каждый вход отдельно. Однако в своем текущем состоянии он просто изменит все в текстовом поле, как если бы это была одна длинная строка, несмотря на то, что он находится в отдельных строках.

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

import tkinter as tk

root = tk.Tk()

def returnEntry(arg=None):

    rawresult = myEntry.get("1.0","end-1c")

    #functionality here
    modifiedresult = rawresult+str(' modded')

    resultLabel.config(text=modifiedresult)
    myEntry.delete(0,END)

canv = tk.Canvas(root,height=500,width=1000,bg='misty rose')
canv.pack()

myEntry = tk.Text(root, width=60)
myEntry.focus()
myEntry.bind("<Return>",returnEntry)
myEntry.place(relx=.05,rely=.1)

enterEntry = tk.Button(root, text= "Convert", command=returnEntry, bg='snow')
enterEntry.pack()

resultLabel = tk.Label(root, text = "")
resultLabel.place(relx=.55,rely=.1)

root.geometry("+700+400")

root.mainloop()

В настоящее время он только изменяет все в текстовом поле, как если бы это была одна длинная строка.

ОБНОВЛЕННЫЙ КОД:

def returnEntry(arg=None):

    rawresult = myEntry.get("1.0","end-1c")

    list_of_entries = []

    for line in rawresult.splitlines():
        list_of_entries.append(line.upper())
#--------------------------------------------------------------
            #functionality here
        for entries in list_of_entries:
            modifiedresult = entries+str(' modded')
#--------------------------------------------------------------
            resultLabel.config(text=modifiedresult)
            myEntry.delete(0,END)

1 Ответ

0 голосов
/ 26 октября 2019

Просто используйте str.splitlines () для его обработки: https://www.tutorialspoint.com/python/string_splitlines.htm

my_text = """This is a very lenghty text example
To give an idea on operating
On strings using built-in method
string.splitlines()"""

repr(my_text)

"'This is a very lenghty text example\\nTo give an idea on operating\\nOn strings using built-in method\\nstring.splitlines()'"

Обратите внимание \ n в вашей строке repr. splitline 'разбивает' текст на части между \ n (новая строка).

## just print
for line in my_text.splitlines():
    print(line+'\n')

## do some transormation
for line in my_text.splitlines():
    print(line.lower()+'\n')

## append to a list to do some further transformation
some_list = []
for line in my_text.splitlines():
    some_list.append(line.upper())
print(some_list[-1]+'\n')
...