【python】【tkinter】如何取出entry中的值,在其他类中做进一步运算

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)

注意注释。我已经把别的注释删掉,留下我修改的地方。请留意。

如果有用,请点击采纳谢谢