我正在努力从另一个类中获取变量条目获取器,我知道我必须通过该类的实例来获取变量,但是我将如何在我想使用的类中使用实际变量在里面吗?
这是课程:
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, }) <-----
在这里您可以看到我已经添加了类的实例,我想从中获取信息,但是不知道如何在数据库类中调用“ FirstNameEntry.get()”。
我必须使用NewEmployee.FirstNameEntry()还是其他方式?
答案 0 :(得分:1)
在这里您可以看到我添加了类的实例,我想从...获取信息。
这不是类的工作方式。继承是“是”关系。您的代码说您的数据库类“是” NewEmployee,这显然是不正确的。数据库不是雇员。
执行此操作的方法是将Employee
的实例传递给您的addEmployee
方法。粗略地说,它看起来像这样:
emp = NewEmployee()
db = Database()
db.addEmployee(emp)
这意味着您需要修改addEmployee
以接受要添加的员工,并调用小部件的get
方法:
class Database():
...
def addEmployee(self, emp):
with conn:
c.execute(..., {'first':emp.FirstNameEntry.get(),...})
请注意,像Employee
这样的类中包含小部件是很不常见的。通常它只包含数据,并且您将有一个单独的类来表示GUI(即:您有一个GUI但有很多员工)
例如,您的GUI类为:
class EmployeeForm():
def __init__(self):
...
self.firstNameEntry = tk.Entry(...)
...
您将在程序开始时创建一个实例:
class TheApplication():
def __init__(self):
...
self.employeeForm = EmployeeForm()
...
然后您可能会有一个Employee
类,看起来像这样:
class Employee():
def __init__(self, first, last, etc):
self.first = first
self.last = last
self.etc = etc
然后,您可以像这样在GUI类中添加一个getEmployee
方法:
class EmployeeForm():
...
def getEmployee(self):
first = self.firstEntry.get()
last = self.lastEntry.get()
etc = self.etcEntry.get()
return Employee(first, last, etc)
然后,在代码中的某个位置(可能是表单或应用程序上的“保存”按钮),您将执行以下操作:
employee = self.employeeForm.getEmployee()
db.addEmployee(employee)
答案 1 :(得分:0)
那不是另一个类……那是一个子类。您可以使用定义它的方式来调用它:self
。另外,请记住,对于所有子类,都必须从子类中调用父类__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(), })