· 8 years ago · May 02, 2018, 08:08 AM
1from gi import require_version
2
3require_version('Gtk', '3.0')
4from time import sleep, gmtime, strftime
5import threading
6import sqlite3
7
8from gi.repository import Gtk
9
10
11class MyWindow(Gtk.Window):
12 def __init__(self):
13 self.open_db()
14 self.get_records()
15 Gtk.Window.__init__(self, title='Ich bin die Fenster-Ueberschrift')
16
17 self.box = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) # Erzeuge VBox
18 self.add(self.box) # VBox wird dem Fenster hinzugefuegt
19
20 self.button = Gtk.Button(label="Click to go") # Button erzeugen
21 self.button.connect('clicked', self.on_button_clicked, 20) # kein Methodenaufruf, sondern nur Methodenname!!
22 self.box.pack_start(self.button, True, True, 0) # Button wird der VBox hinzugefuegt
23
24 self.entry_field = Gtk.Entry() # Texteingabe erzeugen
25 self.box.pack_start(self.entry_field, True, True, 0) # Texteingabe der VBox hinzufügen
26
27 self.make_tree_view()
28 self.box.pack_start(self.tree, True, True, 0)
29
30 def open_db(self):
31 self.con = sqlite3.connect('logbook.db')
32 self.cursor = self.con.cursor()
33 self.cursor.execute("""
34 CREATE TABLE IF NOT EXISTS logbook (
35 timestamp VARCHAR(32),
36 eintrag VARCHAR(100)
37 )
38 """)
39 self.con.commit()
40
41 def on_button_clicked(self, widget, dauer):
42 t = self.entry_field.get_text() ## Zugriff ueber self.eingabefeld
43 if t:
44 time = strftime("%Y-%m-%d %H:%M:%S", gmtime())
45 self.cursor.execute("""
46 INSERT INTO logbook VALUES (?, ?)
47 """, (time, t))
48 self.con.commit()
49
50 self.entry_field.set_text(' ')
51
52 self.get_records()
53 self.tree.set_model(self.store)
54
55
56
57
58 def do_long_running_task(self, duration=20): # Simuliere langandauernde Task
59 sleep(duration)
60 print('Der Button wurde gedrueckt')
61
62 def close(self, widget, param):
63 self.cursor.close()
64 self.con.close()
65 Gtk.main_quit()
66
67 def get_records(self):
68 self.cursor.execute("SELECT * FROM logbook")
69 rows = self.cursor.fetchall()
70 self.store = Gtk.ListStore(str, str)
71 for row in rows:
72 self.store.append((row[0], row[1]))
73
74 def make_tree_view(self):
75 self.tree = Gtk.TreeView(self.store)
76 renderer = Gtk.CellRendererText()
77
78 column = Gtk.TreeViewColumn('Datum', renderer, text=0)
79 column.set_sort_column_id(0)
80 self.tree.append_column(column)
81
82 column = Gtk.TreeViewColumn('Eintrag', renderer, text=1)
83 column.set_sort_column_id(1)
84 self.tree.append_column(column)
85
86 select = self.tree.get_selection()
87 select.connect('changed', self.delete_selected_entry)
88
89
90 def delete_selected_entry(self, widget):
91 model, item = widget.get_selected()
92 if item:
93 print(model[item][0], model[item][1])
94
95
96
97if __name__ == "__main__":
98 win = MyWindow()
99 win.connect("delete-event", win.close) # nur den Methodennamen, keinen M-Aufruf!!!
100 win.show_all() # zeige FEnster
101 Gtk.main() # warte auf ein Event und verarbeite es ggf.