<prompt> Andika hati ya Python inayotumia maktaba ya Tkinter kuunda programu rahisi ya GUI ya kudhibiti orodha ya mambo ya kufanya ya kibinafsi. Programu inapaswa kuwaruhusu watumiaji kuongeza, kuhariri, kufuta, na kutia alama kazi kama zimekamilika. Hifadhi data ya kazi katika hifadhidata ya ndani ya SQLite.PLINFORMAT  <response>: agiza tkinter kama tkkutoka kwa kisanduku cha ujumbe cha tkinterkuagiza sqlite3 Unda muunganisho kwenye hifadhidata ya SQLiteconn sqlite3.connecttasks.dbc conn.cursor Unda jedwali la kazi ikiwa haipoc.executeUNDA JEDWALI IKIWA HAIPO kazi id UFUNGUO MSINGI WA INTEGER, kazi TEXT NOT NULL, imekamilika BOOLEAN NOT NULL conn.commitdarasa la TodoApptk.Tk: def __init__binafsi: super.__init__ self.titleProgramu ya Orodha ya Mambo ya Kufanya Mfumo wa kuongeza kazi mpya add_frame tk.Framebinafsi add_frame.packpady10 self.task_entry tk.Entryongeza_frame, upana30 self.task_entry.gridsafu0, safuwima0, padx20, 0 add_button tk.Buttonongeza_frame, maandishiOngeza Task, amriself.ongeza_task add_button.gridsafu0, safuwima1, padx10, 20 Mfumo wa kuonyesha na kusimamia kazi self.tasks_frame tk.Framebinafsi self.tasks_frame.packfilltk.BOTH, expandTrue binafsi.jaza_tasks def populate_tasksbinafsi: Futa vilivyoandikwa vyote vilivyopo kwenye fremu kwa wijeti katika self.tasks_frame.winfo_children: widget.destroy Pata kazi zote kutoka kwa hifadhidata c.executeCHAGUA KUTOKA kwa kazi ORDER BY ASC iliyokamilishwa, id DESC kazi c.fetchall kwa mimi, task_id, task_text, imekamilika katika enumeratekazi: row_frame tk.Frameself.tasks_frame row_frame.packkujazatk.X, pady2 check_var tk.BooleanVar check_var.setimekamilika chk tk.Kitufe cha kuangalia safu_ya_frame, variableangalia_var, onvalueKweli, offvalueUongo, amrilambda task_idtask_id: self.mark_completetask_id chk.gridisafui, safuwima0 lbl tk.Lebofremu_mlalo, maandishitask_text, wraplength200 lbl.gridisafui, safuwima1 edit_button tk.Kifungo safu_ya_frame, maandishiHariri, amrilambda task_idtask_id, task_texttask_text: self.edit_tasktask_id, task_text edit_button.gridsafui, safuwima2 delete_button tk.Buttonsafu_safu, maandishiFuta, amrilambda task_idtask_id: self.delete_tasktask_id delete_button.gridsafui, safuwima3 def add_taskbinafsi: task_text self.task_entry.get.strip ikiwa sio task_text: messagebox.showerrorKosa, Task haiwezi kuwa tupu. kurudi c.tekelezaINGIZA KATIKA kazi kazi, imekamilika THAMANI ?, ?, maandishi_ya_kazi, Siyo conn.commit binafsi.jaza_tasks self.task_entry.delete0, tk.END def mark_completebinafsi, task_id: c.executeSASISHA kazi SET imekamilika HAIJAkamilika WAPI id ?, task_id, conn.commit kujijaza_tasks def edit_taskbinafsi, kitambulisho_cha kazi, maandishi_ya kazi: new_task_text tk.simpledialog.askstringHariri Jukumu, Ingiza kazi mpya:, initialvaluetask_text ikiwa new_task_text ni None au new_task_text.strip : kurudi c.executeUSASISHA kazi SET task ? WHERE id ?, new_task_text.strip, task_id conn.commit kujijaza_tasks def delete_taskbinafsi, task_id: result messagebox.askyesnoFuta Jukumu, Je, una uhakika unataka kufuta kazi hii? ikiwa matokeo: c.executeFUTA KUTOKA KWA kazi WAPI id ?, task_id, conn.commit kujijaza_taskskama __name__ __main__: app TodoApp app.mainloop Funga unganisho kwenye hifadhidata ya SQLiteconn.close 