Delete from treeview in tkinter

huangapple go评论95阅读模式
英文:

Delete from treeview in tkinter

问题

这是您要翻译的代码部分:

  1. def delete(self):
  2. selected_item = self.record_list.selection()
  3. if selected_item:
  4. item_code = self.record_list.item(selected_item)["text"]
  5. db = sql.connect('record.db')
  6. curs = db.cursor()
  7. curs.execute("DELETE FROM tb_transfers WHERE code=?", (item_code,))
  8. db.commit()
  9. db.close()
  10. self.record_list_refresh()
  11. self.total_label_refresh()
  12. self.withdraw_label_refresh()
  13. self.deposit_label_refresh()

这部分代码是用于删除所选项目的函数,当您点击删除按钮时,它会从 SQLite 中删除相应的记录。

英文:
  1. import tkinter as tk
  2. from tkinter import ttk
  3. import sqlite3 as sql
  4. class main_window:
  5. def __init__(self, window):
  6. self.wind = window
  7. self.wind.geometry('700x550')
  8. self.wind.resizable(0, 0)
  9. self.wind.title('Transfer Record')
  10. self.wind.iconbitmap('icon.ico')
  11. self.draw()
  12. self.record_list_refresh()
  13. def draw(self):
  14. data_entry = tk.LabelFrame(self.wind, text= 'Data Entry', bd= 5)
  15. data_entry.pack(padx= 2, pady= 2, anchor= 'center')
  16. tk.Label(data_entry, text= 'Description:').grid(row= 0, column= 0)
  17. self.description = tk.Entry(data_entry, width= 30)
  18. self.description.grid(row= 1, column= 0, padx= 25) #Description entry
  19. tk.Label(data_entry, text= 'Kind:').grid(row= 0, column= 1)
  20. self.kind = ttk.Combobox(data_entry, state= 'readonly') #Combobox kind
  21. self.kind['values'] = ('Deposit', 'Withdrawn')
  22. self.kind.current(0)
  23. self.kind.grid(row= 1, column= 1, padx= 25)
  24. tk.Label(data_entry, text= 'Amount').grid(row= 0, column= 2)
  25. self.amount = tk.Entry(data_entry)
  26. self.amount.grid(row= 1, column= 2, padx= 25) #Amount entry
  27. tk.Button(data_entry, text= 'Add', height= 2, width= 8, bd= 3, command= self.save).grid(row= 0, column= 3, padx= 5, pady= 4)
  28. tk.Button(data_entry, text= 'Delete', height= 2, width= 8, bd= 3, command= self.delete).grid(row= 1, column= 3, padx= 5, pady= 4) #Save button
  29. transfer_record = tk.LabelFrame(self.wind, text= 'Transfer Record', bd= 5)
  30. transfer_record.pack(padx= 1, pady= 1, anchor= 'center')
  31. self.record_list = ttk.Treeview(transfer_record, columns= ('Kind', 'Description', 'Amount'), height= 15)
  32. self.record_list.column('#0', width= 80, anchor= 'center')
  33. self.record_list.heading('#0', text= 'Code')
  34. self.record_list.column('Description', width= 300, anchor= 'center')
  35. self.record_list.heading('Description', text= 'Description')
  36. self.record_list.column('Kind', width= 125, anchor= 'center')
  37. self.record_list.heading('Kind', text= 'Kind')
  38. self.record_list.column('Amount', width= 80, anchor= 'center')
  39. self.record_list.heading('Amount', text= 'Amount')
  40. self.record_list.pack(padx= 5,pady= 4)
  41. self.totals = tk.LabelFrame(self.wind, text= 'TOTALS', bd= 5)
  42. self.totals.pack(padx= 1, pady= 1, anchor= 'center')
  43. self.label_deposit = tk.Label(self.totals, text= '')
  44. self.label_deposit.pack(side= 'left', padx= 2, pady= 2)
  45. self.deposit_label_refresh()
  46. self.label_withdrawn = tk.Label(self.totals, text= '')
  47. self.label_withdrawn.pack(side= 'left', padx= 200, pady= 2)
  48. self.withdraw_label_refresh()
  49. self.label_total= tk.Label(self.totals, text= '')
  50. self.label_total.pack(side= 'left', padx= 2, pady= 2)
  51. self.total_label_refresh()
  52. def record_list_refresh(self):
  53. self.description.delete(0, tk.END)
  54. self.amount.delete(0, tk.END)
  55. for item in self.record_list.get_children():
  56. self.record_list.delete(item)
  57. db = sql.connect('record.db')
  58. curs = db.cursor()
  59. data = curs.execute("SELECT * FROM tb_transfers")
  60. data = data.fetchall()
  61. for code, description, kind, amount in data:
  62. self.record_list.insert('', tk.END, text= code, values= (description, kind, amount))
  63. db.commit()
  64. db.close()
  65. def deposit_label_refresh(self):
  66. db = sql.connect('record.db')
  67. curs = db.cursor()
  68. deposits = curs.execute("Select amount FROM tb_transfers WHERE kind= 'Deposit'")
  69. deposits = list(deposits.fetchall())
  70. deposits_list = []
  71. for deposit in deposits:
  72. for depo in deposit:
  73. deposits_list.append(depo)
  74. total_deposits = sum(deposits_list)
  75. total_deposits = str(total_deposits)
  76. db.commit()
  77. db.close()
  78. self.label_deposit.configure(text= 'Deposit: $' + total_deposits)
  79. def withdraw_label_refresh(self):
  80. db = sql.connect('record.db')
  81. curs = db.cursor()
  82. withdraws = curs.execute("Select amount FROM tb_transfers WHERE kind= 'Withdrawn'")
  83. withdraws = list(withdraws.fetchall())
  84. withdraws_list = []
  85. for withdraw in withdraws:
  86. for withd in withdraw:
  87. withdraws_list.append(withd)
  88. total_withdraws = sum(withdraws_list)
  89. total_withdraws = str(total_withdraws)
  90. db.commit()
  91. db.close()
  92. self.label_withdrawn.configure(text= 'TOTAL: $' + total_withdraws)
  93. def total_label_refresh(self):
  94. db = sql.connect('record.db')
  95. curs = db.cursor()
  96. deposits = curs.execute("Select amount FROM tb_transfers WHERE kind= 'Deposit'")
  97. deposits = list(deposits.fetchall())
  98. deposits_list = []
  99. for deposit in deposits:
  100. for depo in deposit:
  101. deposits_list.append(depo)
  102. total_deposits = sum(deposits_list)
  103. withdraws = curs.execute("Select amount FROM tb_transfers WHERE kind= 'Withdrawn'")
  104. withdraws = list(withdraws.fetchall())
  105. withdraws_list = []
  106. for withdraw in withdraws:
  107. for withd in withdraw:
  108. withdraws_list.append(withd)
  109. total_withdraws = sum(withdraws_list)
  110. total_totals = total_deposits - total_withdraws
  111. total_totals = str(total_totals)
  112. db.commit()
  113. db.close()
  114. self.label_total.configure(text= 'TOTAL: $' + total_totals)
  115. def save(self):
  116. db = sql.connect('record.db')
  117. curs = db.cursor()
  118. curs.execute("INSERT INTO tb_transfers(description, kind, amount) VALUES(?, ?, ?)", (self.description.get(), self.kind.get(), self.amount.get()))
  119. db.commit()
  120. db.close()
  121. self.record_list_refresh()
  122. self.total_label_refresh()
  123. self.withdraw_label_refresh()
  124. self.deposit_label_refresh()
  125. def delete(self):
  126. obj_main_window = main_window(tk.Tk())
  127. obj_main_window.wind.mainloop()

the idea is delete the selected item from the sqlite when i press the delete button.

答案1

得分: 0

You can get the selected code using Treeview.focus() and Treeview.item():

  1. def delete(self):
  2. selected = self.record_list.focus() # item selected?
  3. if selected:
  4. # 获取所选项的 'code'
  5. code = self.record_list.item(selected, "text")
  6. # 从 sqlite 表中删除记录
  7. db = sql.connect("record.db")
  8. cur = db.cursor()
  9. cur.execute("DELETE FROM tb_transfers WHERE code = ?", (code,))
  10. db.commit()
  11. db.close()
  12. # 更新 GUI
  13. self.record_list_refresh()
  14. self.total_label_refresh()
  15. self.withdraw_label_refresh()
  16. self.deposit_label_refresh()
英文:

You can get the selected code using Treeview.focus() and Treevew.item():

  1. def delete(self):
  2. selected = self.record_list.focus() # item selected?
  3. if selected:
  4. # get the 'code' of selected item
  5. code = self.record_list.item(selected, "text")
  6. # remove record from sqlite table
  7. db = sql.connect("record.db")
  8. cur = db.cursor()
  9. cur.execute("DELETE FROM tb_transfers WHERE code = ?", (code,))
  10. db.commit()
  11. db.close()
  12. # update GUI
  13. self.record_list_refresh()
  14. self.total_label_refresh()
  15. self.withdraw_label_refresh()
  16. self.deposit_label_refresh()

huangapple
  • 本文由 发表于 2023年5月11日 01:08:59
  • 转载请务必保留本文链接:https://go.coder-hub.com/76220999.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定