Как использовать метод класса в качестве параметра (переменной)? - PullRequest
1 голос
/ 26 января 2020

Я создаю программное обеспечение с многоязычным функционалом. Я думаю о том, как разделить и легко назвать тексты на разных языках. Вот что я получил:

import tkinter as tk  # GUI

class Texts():

    def __init__(self, txtENG, txtRU):
        self.txtENG = txtENG
        self.txtRU = txtRU

    def txt_ENG(self):
        return self.txtENG  # should return English text

    def txt_RU(self):
        return self.txtRU  # should return Russian text


language_Q = 'Choose the language:' 
language_A = ['English','русский']  # two options for OptionMenu

txt_ENG_greetings = 'Hello!'  # English text
txt_RU_greetings = 'Привет!'  # Russian text

  # initializing English and Russian texts to Texts class as greetings attribute
greetings = Texts(txt_ENG_greetings, txt_RU_greetings)


def secondstep():

      # assigning methode as a variable according to chosen option
    if q1.get() == 'English': language = Texts.txt_ENG
    if q1.get() == 'русский': language = Texts.txt_RU

      # label that should display greetings called by the right methode 
    greetings_label = tk.Label(window, text = greetings.language()).grid(row=3)

    window.mainloop()


window = tk.Tk()
window.title('Hello StackerOverflow')

  # option menu to choose the language
q1 = tk.StringVar(window); q1.set(language_Q)
w = tk.OptionMenu(window, q1, *language_A).grid(row=0);

  # button to call secondstep function
button = tk.Button(window, text='Continue', command=secondstep).grid(row=1)

window.mainloop()

Код не работает. У меня проблема с использованием метода в качестве параметра. Ошибка:

   greetings_label = tk.Label(window, text = greetings.language()).grid(row=3)
AttributeError: 'Texts' object has no attribute 'language'

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

1 Ответ

1 голос
/ 26 января 2020

Вам нужно изменить второй шаг для вызова языковой переменной. Поскольку у Объектных Текстов нет метода language(). Кроме того, вам нужно сохранить метод объекта, а не класса, чтобы фактически запустить его.

def secondstep():
    # assigning methode as a variable according to chosen option
    if q1.get() == 'русский':
        language = greetings.txt_RU
    else:  # have a default selection.
        language = greetings.txt_ENG

    # label that should display greetings called by the right method
    greetings_label = tk.Label(window, text=language()).grid(row=3)

    window.mainloop()
...