如何将变量值从一个文件中的一个类传递给另一个文件中的另一个类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的主要内容,如果未能解决你的问题,请参考以下文章