【问题标题】:What's the most efficient way to pass a parameter between classes in Python?在 Python 中的类之间传递参数的最有效方法是什么?
【发布时间】:2016-01-12 12:50:09
【问题描述】:

我目前正在构建一个基于用户的系统,其中我在 pythons tkinter 中有一个用于登录屏幕的类。一旦用户信息正确,它将为菜单启动一个类。我正在使用 python 读取和检查用户信息的 SQL 数据库。我需要将用户的用户名传递给菜单类,以便该类知道要在该菜单上显示什么信息。

from tkinter import *

class Login:

    def __init__(self, master):
        self.master = master

        self.label = Label(self.master, text = "enter name")
        self.entry = Entry(self.master)
        self.button = Button(self.master, text = "submit", command = self.loadMenu)

        self.label.grid(row = 0, column = 0)
        self.entry.grid(row = 0, column = 1)
        self.button.grid(row = 1, column = 0, columnspan = 2)

        self.name = self.entry.get()

    def loadMenu(self):
        self.menu = Toplevel(self.master)
        self.app = Menu(self.menu)


class Menu:

    def __init__(self, master):
        self.master = master

        self.label = Label(self.master, text = "dave")

        self.label.grid(row = 0, column = 0)


def main():
    root = Tk()
    run = Login(root)
    root.mainloop()

if __name__ == '__main__':
    main()

在上面的示例代码中,可以使用什么方法将变量“self.name”传递给类菜单,以便它可以显示在标签中?我试图不使用全局变量。非常感谢。

【问题讨论】:

  • Menu(self.menu, self.name)...!?
  • 请注意,您正在屏蔽 tkinter 自己的 Menu 类。
  • 您是否更改了Menu.__init__ 的方法签名以匹配它?
  • 这么说吧:您已经将self.menuLogin 传递到Menu... 使用完全相同的技术传递附加值有什么问题?!
  • 当您说“将课程分配到新窗口”时,您到底指的是什么?! Menu(self.menu) 没有“将类分配给新窗口”;它实例化类并将变量(self.menu) 传递给它的__init__ 方法。 – 也许阅读更多有关Python OOP 基础知识的内容?

标签: python class variables parameters tkinter


【解决方案1】:

您的菜单类,需要一个方法来设置名称。例如:

class myMenu:
    def __init__(self,...):
        ....

    def set_Me(self,some_name):
        self.some_name = some_name
        # or
        self.label.setName(some_name)

在你调用的主程序中:

self.app.set_Me(self.name)

以上是伪代码。但你应该明白这一点。 您可以使用此技术随时将变量传递给任何类。

如果你只需要传递一次变量:

class my_class:
    def __init__(self,my_variable):
        self.my_variable = my_variable

【讨论】:

  • 太复杂了。
  • @TigerhawkT3 :提出更好的建议。我们都在这里学习
  • 更好的建议在 cmets 中。
  • 有些问题不值得回答(大多数不值得回答错误)。
  • 并非所有人都是专家。我很清楚开始有多么困难。所以这就是为什么如果我看到有人被卡在某个地方,我什至会回答愚蠢的问题。在这里,至少我们已经看到 Max 在他的问题中添加了一些代码。所以他真的很努力……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
  • 2012-01-17
  • 2023-01-21
  • 1970-01-01
  • 2021-04-28
  • 2010-10-16
相关资源
最近更新 更多