如何将变量值从一个文件中的一个类传递给另一个文件中的另一个类python tkinter

Posted

技术标签:

【中文标题】如何将变量值从一个文件中的一个类传递给另一个文件中的另一个类python tkinter【英文标题】:How to pass variable value from one class in one file to another class in another file python tkinter 【发布时间】:2021-01-21 01:51:04 【问题描述】:

我是 python 新手。使用 python 3.7,Windows 操作系统。假设我创建了一个名为 Class1.py 其中

import tkinter as tk
import Class2
class main_window:
    def openanotherwin():
        Class2.this.now()
    def create():
        root = tk.Tk()
        button1 = tk.Button(root, text="Open another window", command = openanotherwin )
        button1.pack()
        root.mainloop()

现在我的 Class2.py 包含:

import tkinter as tk
class this():
    def now():
        new = tk.Toplevel(root)  #Error displayed: root is not defined
        lb = tk.Label(new, text = "Hello")
        lb.pack()
        new.mainloop()

我的 Main.py 包含:

import Class1
Class1.main_window.create()

显示的错误是:root is not defined in Class2.py。我已经尝试root = Class1.main_window.root 带来root 的值,但它显示函数没有属性root 的错误。

请帮我解决我的问题。

【问题讨论】:

请使用完整的错误回溯更新您的问题。 这能回答你的问题吗? How to pass arguments to a Button command in Tkinter? 【参考方案1】:

首先,Class2 中的类的名称“this”可能有错误。 我猜“this”是当前对象实例的保留名称。 您应该将其更改为其他内容,例如“类2”

然后你应该在你的 class1 中实例化 class2 并将 root 作为参数传递给构造函数。只有这样,您才能在 class2 中使用 root。

【讨论】:

不,this 在 python 中无论如何都没有保留,奇怪的是self 也不是。 name "this" 暂时仅作为参考,实际代码有不同的名称,未保留。 您能否通过编写代码来解释如何将 root 作为参数传递给构造函数,因为我是新手并正在学习。感谢您的建议。【参考方案2】:

我认为函数需要root

 def now(root): 
    new = tk.Toplevel(root)  #Error displayed: root is not defined

然后在class1:

def openanotherwin(root):
    Class2.this.now(root)

第三个:

button1 = tk.Button(root, text="Open another window", command=lambda: main_window.openanotherwin(root) )

===

Class1.py

import tkinter as tk
import Class2
class main_window:
def openanotherwin(root):
    Class2.this.now(root)
    def create():
        root = tk.Tk()
button1 = tk.Button(root, text="Open another window", command=lambda: main_window.openanotherwin(root) )
        button1.pack()
        root.mainloop()

Class2.py

import tkinter as tk
class this():
def now(root): 
    new = tk.Toplevel(root)  #Error displayed: root is not defined
        lb = tk.Label(new, text = "Hello")
        lb.pack()
        new.mainloop()

【讨论】:

好的,这是问题的一部分。下一个是将root 传递到对now() 的每次调用中。 您的第三个代码块无效。应该是command=lambda: main_window.openanotherwin(root)【参考方案3】:

这是一个将参数传递给类构造函数的示例:

class DemoClass:
    num = 101

    # parameterized constructor
    def __init__(self, data):
        self.num = data

    # a method
    def read_number(self):
        print(self.num)


# creating object of the class
# this will invoke parameterized constructor
obj = DemoClass(55)

# calling the instance method using the object obj
obj.read_number()

# creating another object of the class
obj2 = DemoClass(66)

# calling the instance method using the object obj
obj2.read_number()

【讨论】:

以上是关于如何将变量值从一个文件中的一个类传递给另一个文件中的另一个类python tkinter的主要内容,如果未能解决你的问题,请参考以下文章

通过单击鼠标将变量值传递给java中的servlet

如何将变量值传递给julia中的宏?

如何将变量值传递给套接字字符串

将变量值从反应构造函数传递到 nodeJS 后端

将变量值从 JS 传递给 PHP

如何将变量值从循环A更新到另一个循环B - 在bash中