如何在另一个 class 中使用 tkinter entry .get() 函数

How to use tkinter entry .get() fuction in another class

我正在努力从另一个 class 获取变量条目 getter,我知道我必须传递 class 我从中获取变量的实例,但是如何我会在 class 中使用实际变量吗?我想在其中使用它?

这里是 class:

class NewEmployee:
    def __init__(self, master):

        self.master = master
        self.master.title("Jans Corp")
        self.master.configure(background="lightgrey")
        self.master.geometry("300x500")

        self.FirstNameEntry = tk.Entry(self.master)
        self.SurnameEntry = tk.Entry(self.master)
        self.AgeEntry = tk.Entry(self.master)
        self.PostcodeEntry = tk.Entry(self.master)

这是我想使用的地方 self.FirstNameEntry.get()

class Database(NewEmployee):
    def __init__(self, master):

        conn = sqlite3.connect(':memory:')
        c = conn.cursor()


    def addEmployees(self):  
        with conn: 
            c.execute("INSERT INTO Employees VALUES (:first, :last, :age)",
                      {'first':emp.first, 'last':emp.last, 'age':emp.age, }) <-----

在这里你可以看到我已经添加了 class 的实例,我想从中获取信息但不知道如何在数据库 class 中调用 "FirstNameEntry.get()"。

我必须使用 NewEmployee.FirstNameEntry() 还是其他东西?

那不是另一个 class ...那是一个子 class。您可以按照定义它的方式来调用它:使用 self。另外,请记住,对于所有子class,您必须从子class 调用父__init__

class Database(NewEmployee):
    def __init__(self, master):
        super().__init__(master) #call parent __init__
        conn = sqlite3.connect(':memory:')
        c = conn.cursor()


    def addEmployees(self):  
        with conn: 
            c.execute("INSERT INTO Employees VALUES (:first, :last, :age)",
                      {'first':self.FirstNameEntry.get(), 'last':self.SurnameEntry.get(), 'age':self.AgeEntry.get(), }) 

Here you can see i have added the instance of the class im want to get the info from...

这不是 class 的工作方式。继承是一种 "is a" 关系。您的代码说您的数据库 class "is a" NewEmployee,这显然不是真的。数据库不是雇员。

执行此操作的方法是将 Employee 的实例传递给您的 addEmployee 方法。粗略地说,它看起来像这样:

emp = NewEmployee()
db = Database()
db.addEmployee(emp)

也就是说你需要修改addEmployee接受要添加的员工,并调用widgets的get方法:

class Database():
    ...
    def addEmployee(self, emp):
        with conn: 
            c.execute(..., {'first':emp.FirstNameEntry.get(),...}) 

请注意,像 Employee class 这样的东西里面有小部件是很不寻常的。通常它只有数据,你会有一个单独的 class 来表示 GUI(即:你有一个 GUI 但有很多员工)

例如,您的 GUI class 将是:

class EmployeeForm():
    def __init__(self):
        ...
        self.firstNameEntry = tk.Entry(...)
        ...

您将在程序开始时创建一个这样的实例:

class TheApplication():
    def __init__(self):
        ...
        self.employeeForm = EmployeeForm()
        ...

你可能会得到一个看起来像这样的 Employee class:

class Employee():
    def __init__(self, first, last, etc):
        self.first = first
        self.last = last
        self.etc = etc

然后,您可以在 GUI class 中添加一个 getEmployee 方法,如下所示:

class EmployeeForm():
    ...
    def getEmployee(self):
        first = self.firstEntry.get()
        last = self.lastEntry.get()
        etc = self.etcEntry.get()
        return Employee(first, last, etc)

然后,在您的代码中的某处——可能是表单或应用程序上的 "save" 按钮——您将执行如下操作:

employee = self.employeeForm.getEmployee()
db.addEmployee(employee)