如何在另一个 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)
我正在努力从另一个 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)