Переведите текстовую переменную, затем поместите ее в метку tkinter - PullRequest
0 голосов
/ 16 октября 2018

Я работаю над очень простым переводческим приложением, использующим Python.По сути, он берет все, что вы вводите в поле ввода, заменяет некоторые буквы (например, превращает «а» в «и») и затем отображает это как метку.К сожалению, слово, которое вы вводите, никогда не переводится, оно просто остается как есть.В консоли не отображаются ошибки.Вот фрагмент кода, который должен сделать это:

eword = StringVar()
Entry1 = Entry(root, textvariable=eword, width=30, bg="lightgrey").place(x=250, y=155)

def translate(eword):
    translation = ""
    for letter in eword:
        if letter in "a":
            translation = translation + "e"
        elif letter in "m":
            translation = translation + "n"
        else:
            translation = translation + letter
    return translation



def doit():
    text = eword.get()
    label3 = Label(root, text=text, font=("Arial", 20), bg="white").place(x=195, y=300)
    return

Я абсолютный новичок в Python, поэтому, пожалуйста, объясните все просто.

1 Ответ

0 голосов
/ 16 октября 2018

Я немного изменил макет и добавил необходимый код для его запуска.

StringVar - это не обычная строка.Чтобы прочитать его значение, вам нужно использовать метод get(), для записи в него вы используете set().

Когда вы создаете запись: Entry1 = Entry(root, ...).place(x=250, y=155) переменная Entry1 получит значение None, потому что это то, что возвращает place().Я отделил создание записи от размещения в окне.Кроме того, я использую pack() вместо place().

Я добавил кнопку для запуска перевода, так как я не нахожу никакого механизма в вашем коде.Кнопка вызывает функцию translate() при нажатии.

from tkinter import *

root = Tk()                 # Application main window
root.geometry('300x200')    # Setting a size

eword = StringVar()
entry1 = Entry(root, textvariable=eword, width=30)
entry1.pack(pady=20)    # Pack entry after creation 

def translate():
    original = eword.get()  # Read contents of eword
    translation = ""
    for letter in original:
        if letter in "a":
            translation = translation + "e"
        elif letter in "m":
            translation = translation + "n"
        else:
            translation = translation + letter
    new_text.set(translation)  # Write translation to label info

action = Button(root, text='Translate', command=translate)
action.pack()   # Pack button after creation 

new_text = StringVar()
info = Label(root, textvariable=new_text)
info.pack(pady=20)

root.mainloop()

Вместо циклического перебора строки вы можете использовать replace():

original.replace('a', 'e')
original.replace('m', 'n')

Возможно, вы захотите изучить и строковую функцию translate():)

...