英文:
why is this showing a TypeError: View_Account.go_to_modify_account() missing 1 required positional argument: 'id'
问题
更新按钮不起作用的原因是在 self.modify_account
方法中,您尝试使用 id
参数,但没有为该方法提供该参数。这可能导致类型错误。
您可以尝试做以下修改,将 self.modify_account
方法修改为不需要参数的方法,然后在该方法内部获取选定行的 id
:
def modify_account(self):
if not self.table.selection():
messagebox.showinfo('Update Account', 'Please select an account to modify')
else:
for selected_row in self.table.selection():
row = self.table.item(selected_row)
id = row['values'][0]
self.go_to_modify_account(id)
通过这种方式,modify_account
方法将从选定行中获取 id
,而无需在方法调用时传递参数。这应该解决类型错误问题。如果仍然存在问题,请提供更多详细信息以供进一步帮助。
英文:
class View_Account(tk.Frame):
def __init__(self,master):
tk.Frame.__init__(self,master)
self.parent = master
main_frame = tk.Frame(self, width=750, height=450, bg='white')
main_frame.pack(fill='both', expand='yes')
self.Frame1 = tk.Frame(self, width=750, height=100, bg='pink')
self.Frame1.place(x=0, y=0)
self.Frame2 = tk.Frame(self, width=750, height=450, bg='#E8E4C9')
self.Frame2.place(x=0, y=100)
self.view_acc = tk.Label(self, text='View Account', font=('Algerian', 26), bg='pink')
self.view_acc.place(x=90, y=10)
self.modify_acc = tk.Button(self, text='Modify Account', font=('Algerian', 13), command=self.go_to_modify_account)
self.modify_acc.place(x= 40, y=60)
self.delete_acc = tk.Button(self, text='Delete Account', font=('Algerian', 13), command=self.delete_account)
self.delete_acc.place(x= 200, y=60)
self.back_button = tk.Button(self, text='Back', font=('Algerian', 13), command=self.go_to_admin_dashboard)
self.back_button.place(x= 5, y=5)
columns = ('id','fullname','birthdate','address','email','contact_number','card_number','pin','initial_deposit')
self.table = ttk.Treeview(self, columns=columns, show='headings', selectmode='browse')
self.table.heading('id', text='id')
self.table.heading('fullname', text='Name')
self.table.heading('birthdate', text='Birthdate')
self.table.heading('address', text='Address')
self.table.heading('email', text='Email')
self.table.heading('contact_number', text='Contact #')
self.table.heading('card_number', text='Card Number')
self.table.heading('pin',text='PIN')
self.table.heading('initial_deposit',text='Initial Deposit')
self.table.column('id', width=5)
self.table.column('fullname', width=70)
self.table.column('birthdate', width=70)
self.table.column('address', width=115)
self.table.column('email', width=145)
self.table.column('contact_number', width=80)
self.table.column('card_number', width=115)
self.table.column('pin', width=50)
self.table.column('initial_deposit', width=100)
self.table.place(x=0, y=102)
self.table.configure(height=16)
self.update_table()
def update_table(self):
self.client_account = self.get_client_account()
self.table.delete(*self.table.get_children())
for client in self.client_account:
row = (
client.id,
client.fullname,
client.birthdate,
client.address,
client.email,
client.contact_number,
client.card_number,
client.pin,
client.initial_deposit
)
self.table.insert('', tk.END, values=row)
def get_client_account(self):
db_conn = database_handler.DBHandler()
self.client_account = db_conn.view_accounts()
db_conn.close()
return self.client_account
def delete_account(self):
if len(self.table.selection()) == 0:
messagebox.showerror('Error', 'Select Account to delete.')
else:
proceed = messagebox.askyesno('Account Deletion', 'Do you wish to continue?')
if not proceed:
return
for selected_row in self.table.selection():
row = self.table.item(selected_row)
id = row['values'][0]
db_conn = database_handler.DBHandler()
db_conn.delete_accounts(id)
db_conn.close()
self.update_table()
def go_to_modify_account(self, id):
self.parent.change_window('Modify_Account', id=id)
def modify_account(self):
if not self.table.selection():
messagebox.showinfo('Update Account', 'Please select an account to modify')
else:
for selected_row in self.table.selection():
row = self.table.item(selected_row)
id = row['values'][0]
self.go_to_modify_account(id)
def go_to_admin_dashboard(self):
self.parent.change_window('Admin_Dashboard')
def on_return(self):
pass
why does the update button not work. it shows type error
i tried adding self to the id but it still does not work
答案1
得分: 2
根据文档,command=
需要一个没有参数的函数。所以你使用 command=self.foo
意味着你将调用 self.foo()
,并且没有 id
参数。
为什么你在 go_to_modify_account
中期望一个 id
参数,但在其他地方没有?你是不是想要使用 command=modify_account
?
英文:
At least according to the documentation, command=
takes a function that has no arguments. So the fact that you have command=self.foo
means that you're going to end up calling self.foo()
and there is no id
argument.
Why are you expecting an id
argument in go_to_modify_account
but none of the others? Did you mean command=modify_account
?
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论