如何使用类方法作为参数(变量)?

问题描述 投票:1回答:1

我正在创建具有多语言功能的软件。我正在考虑如何分隔和轻松调用不同语言的文本。这是我得到的:

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()

代码不起作用。我在使用methode作为参数时遇到问题。错误:

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

我花了很多时间尝试解决此问题,但一无所获,因此,如果不可能,什么是最佳选择?谢谢!

python class variables methods call
1个回答
1
投票

您需要更改第二步才能调用语言变量。因为对象文本没有方法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()
© www.soinside.com 2019 - 2024. All rights reserved.