edit workflow
[pynotes-id.git] / main.py
blob4908f480eb458ddd716b76d04857ff30192d7191
1 import PySimpleGUI as sg
2 import sqlite3
3 from PIL import Image, ImageTk
4 # import tkinter as tk
5 sg.theme('Dark Brown 1')
6 # daftar_tema = sg.theme_list()
7 connection = sqlite3.connect('data.db', isolation_level=None)
8 sql = connection.cursor()
10 def setup_database():
11 with connection:
12 sql.execute('CREATE TABLE IF NOT EXISTS catatan (id INTEGER PRIMARY KEY, judul TEXT, isi TEXT)')
14 def ambil_data_catatan():
15 with connection:
16 query = sql.execute('SELECT * FROM catatan')
17 hasil = query.fetchall()
18 return hasil
20 def edit_catatan(id, judul, isi):
21 with connection:
22 sql.execute("""
23 UPDATE catatan
24 SET judul = ?,
25 isi = ?
26 WHERE
27 id IS ?
28 """, (judul, isi, id))
29 notif('Berhasl disimpan!')
32 def buka_jendela_edit():
33 indeks_catatan = window.Element('-CATATAN-LIST-').get_indexes()[0]
34 catatan = data_catatan[indeks_catatan]
36 event_edit, values_edit = sg.Window('Catatan', [[buat_layout_edit(catatan[0], catatan[1], catatan[2])]], modal=True).read(close=True)
37 if event_edit == 'Edit':
38 edit_catatan(values_edit['ID-EDIT-IN'], values_edit['JUDUL-EDIT-IN'], values_edit['ISI-EDIT-IN'])
40 def buat_layout_edit(id, judul, isi):
41 return sg.Column([
44 sg.Frame('Catatan', [
46 sg.Input(default_text=id, key='ID-EDIT-IN', readonly=True, visible=False)
49 sg.Text('Judul:', font=15),
50 sg.Input(default_text=judul, key='JUDUL-EDIT-IN', size=(50,1), font=15)
53 sg.Text('Isi: ', font=15),
54 sg.Multiline(default_text=isi, key='ISI-EDIT-IN', size=(50,19), font=15)
57 sg.Button('Edit', font=15)
59 ], size=(600,500))
64 # tambah ke db
65 def tambah_catatan(judul, isi):
66 with connection:
67 sql.execute('INSERT INTO catatan (judul, isi) VALUES (?, ?)', (judul, isi))
68 notif('Berhasil ditambahkan!')
70 def buka_jendela_tambah():
71 event_tambah, values_tambah = sg.Window('Tambah Catatan', [[buat_layout_tambah()]], modal=True).read(close=True)
72 if event_tambah == 'Simpan':
73 tambah_catatan(values_tambah['JUDUL-ADD-IN'], values_tambah['ISI-ADD-IN'])
75 # layout tambah catatan
76 def buat_layout_tambah():
77 return sg.Column([
79 sg.Frame('Tambah Catatan:', [
81 sg.Text('Judul:', font=15),
82 sg.Input(key='JUDUL-ADD-IN', size=(35,1), font=15)
85 sg.Text('Isi: ', font=15),
86 sg.Multiline(key='ISI-ADD-IN', size=(35,15), font=15)
89 sg.Button('Simpan', font=15)
91 ], size=(400,400))
92 ]])
94 def hapus_catatan(indeks):
95 catatan = data_catatan[indeks]
96 id_catatan = catatan[0]
97 with connection:
98 sql.execute('DELETE FROM catatan WHERE id IS ?', (id_catatan,))
100 def perbarui_data():
101 global data_catatan
102 global daftar_judul
103 data_catatan = ambil_data_catatan()
104 daftar_judul = [i[1] for i in data_catatan]
105 perbarui_daftar_catatan(daftar_judul)
109 def perbarui_daftar_catatan(daftar_judul_baru):
110 window.Element('-CATATAN-LIST-').update(daftar_judul_baru)
112 def notif(msg):
113 sg.popup_no_buttons(msg, font=15, no_titlebar=True, auto_close=True, auto_close_duration=2)
114 # start
115 setup_database()
117 data_catatan = ambil_data_catatan()
118 daftar_judul = [i[1] for i in data_catatan]
120 layout_utama = sg.Column([
121 [sg.Text('Catatan Anda', font=25)],
122 [sg.Text('Dibuat oleh: Muhammad Khuirul Huda 2304130046', font=14)],
124 [sg.Frame('Daftar Catatan:', [
126 sg.Listbox(values=daftar_judul, size=(100,100), enable_events=True, key='-CATATAN-LIST-', font=15)
128 ], size=(800,350))],
130 sg.Button('Buka', font=14),
131 sg.Button('Tambah', font=14),
132 sg.Button('Hapus', font=14)
136 # icon= b'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'
137 # root = tk.Tk()
138 # ic = Image.open(r'./favicon.jpeg')
139 # ic2 = ImageTk.PhotoImage(ic)
141 layout = [[layout_utama]]
142 window = sg.Window('PyNotes-ID', layout, finalize=True)
145 while True:
146 event, values = window.read()
147 print(event, values)
148 if event == sg.WIN_CLOSED:
149 break
150 elif event == 'Buka':
151 if len(values['-CATATAN-LIST-']) > 0:
152 buka_jendela_edit()
153 else:
154 notif('Pilih catatan untuk dibuka!')
155 elif event == 'Tambah':
156 buka_jendela_tambah()
157 elif event == 'Hapus':
158 if len(values['-CATATAN-LIST-']) > 0:
159 if sg.popup_yes_no('Sebuah catatan bisa bermakna apa saja\nCatatan hanya menggunakan sepersekian persen dari penyimpananmu', 'Apakah anda yakin untuk menghapus catatan ini?', font=14, title='Perhatian') == 'Yes':
160 hapus_catatan(window.Element('-CATATAN-LIST-').get_indexes()[0])
161 notif('Berhasil dihapus!')
162 else:
163 notif('Pilih catatan untuk dihapus!')
164 if event != '-CATATAN-LIST-':
165 perbarui_data()
166 window.close()