1、目标
取出class Page中填入entry的值,用于在class Data中做进一步运算
2、前提
保证Page 和 Data 两个类相互独立。因为实际情况中,大量运算集中在Data,并入可能会导致其他问题
3、问题
在上述前提下如何实现。若现有结构确实不合理,推翻重写也行。
import tkinter as tk
class Page:
def __init__(self):
self.window = tk.Tk()
self.window.title("main")
self.window.geometry("300x200")
self.lf()
self.data = Data()
self.window.mainloop()
def lf(self):
lf = tk.LabelFrame(self.window)
lf.pack()
b = tk.Button(lf, text="oh!no!", command=self.bubu)
b.grid(row=1, column=1)
e = tk.Entry(lf, width=30)
e.grid(row=2, column=1)
# 假设这是页面运行时,手工填入entry的。目标是取出这个值,用于在class Data中做进一步运算
e.insert("end", "help")
def bubu(self):
self.data.ouch()
class Data: # 我要独立存在
def __init__(self):
self.guy = "sam"
self.savage = "alien"
def ouch(self): # 需要独立,不写在class page中
print("{}被{}追着跑,所以大声叫".format(self.guy, self.savage))
# 【sam被alien追着跑,所以大声叫help】是最终要打印的句子
# help取自class Page中输入的信息
Page()
在lf函数的末尾填上一个检查,检查到用户输入确认后,然后一个return 返回输入值,然后在全局将这个返回值赋值给一个变量,这时候就能在Data类函数用global进行调用了
可以将entry 的值作为参数传入。
class Page:
...
def lf(self):
...
self.e = tk.Entry(lf, width=30) # 使用 self.e 使其作为类的属性
self.e.grid(row=2, column=1)
self.e.insert("end", "help")
def bubu(self):
self.data.ouch(self.e.get()) # 传入entry 的值
class Data:
...
def ouch(self, value): # 得到值
print("{}被{}追着跑,所以大声叫{}".format(self.guy, self.savage, value)) # 打印
Page(data)
注意注释。我已经把别的注释删掉,留下我修改的地方。请留意。
如果有用,请点击采纳谢谢