Как использовать входные данные для чтения из команды Entry с использованием команды StringVar () в качестве строки в tkinter - PullRequest
0 голосов
/ 14 января 2019

Я создаю программу на Python с графическим интерфейсом tkinter. Я читаю текст от пользователя и намерен использовать этот текст в качестве аргумента для дальнейших функций. Но эти функции требуют, чтобы текст был в «строковом» типе данных, а не в «методе класса», что происходит, если я использую функцию .get().

Я использовал команду виджета Entry для чтения и использовал StringVar() в качестве переменной. Я попытался str(content.get) в функции parse1(), но это не работает

def parse1():

    string1=str(content.get)

    try:
        txt = TextBlob(string1) #TextBlob is a function used for string processing
        for sentence in txt.sentences:
            genQuestion(sentence)       
    except Exception as e:
        raise e

Label(window, text="Text").grid(row=0)
content = StringVar()
e1 = Entry(window, textvariable=content)
e1.grid(row=0, column=1)
Button(window, text='Quit', command=window.quit).grid(row=3, column=0, sticky=W, pady=4)
Button(window, text='ADD', command=parse1).grid(row=3, column=1, sticky=W, pady=4)
window.mainloop()

Я ожидаю, что content.get() тип данных будет строковым с использованием str(). Когда я пытаюсь string1=str(content.get) ничего не происходит, и программа не прогрессирует дальше. Если я попробую print (string1), чтобы проверить, я получу:

<bound method StringVar.get of <tkinter.StringVar object at 0x000001D17418B710>> 

вместо введенного текста, поэтому я думаю, что использование str() не будет работать. Я пробовал без str() и получил:

Exception in Tkinter callback Traceback (most recent call last):   File "C:\Users\Tejas Jambhale\Anaconda3\lib\tkinter\__init__.py", line 1699, in __call__
    return self.func(*args)   File "C:/Users/Tejas Jambhale/Documents/genquest-master/quest.py", line 165, in parse1
    raise e   File "C:/Users/Tejas Jambhale/Documents/genquest-master/quest.py", line 159, in parse1
    txt = TextBlob(string)   File "C:\Users\Tejas Jambhale\Anaconda3\lib\site-packages\textblob\blob.py", line 370, in
__init__
    'must be a string, not {0}'.format(type(text))) TypeError: The \`text\` argument passed to \`__init__(text)\` must be a string, not <class 'method'>

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

1 Ответ

0 голосов
/ 14 января 2019

Рассмотрим этот код:

string1=str(content.get)

Выше вы не вызываете метод get, вы просто предоставляете имя. get - это метод, и, как и любой метод python, вы должны использовать скобки для вызова функции. Кроме того, нет необходимости преобразовывать его в строку, поскольку метод get возвращает строку:

string1 = content.get()

Если вы хотите вызвать метод для записи и удалить зависимость от StringVar, вы можете сделать это аналогичным образом:

string1 = e1.get()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...