【问题标题】:How to use a class method as a parameter (variable)?如何使用类方法作为参数(变量)?
【发布时间】:2020-05-12 02:11:17
【问题描述】:

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

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'

我花了很多时间试图解决这个问题,但一无所获,所以如果不可能,最好的选择是什么?谢谢!

【问题讨论】:

标签: python class variables methods call


【解决方案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()

【讨论】:

    猜你喜欢
    • 2019-03-22
    • 1970-01-01
    • 2017-04-06
    • 2018-08-25
    • 2018-11-22
    • 2013-12-10
    • 2010-11-16
    • 2013-04-17
    • 1970-01-01
    相关资源
    最近更新 更多