Εδώ και κάτι μέρες έχω σχεδιάσει ένα GUI στο glade (GTK GUI designer για Linux) αλλά δεν μπορώ να συνδέσω τα events με callbacks για να επανεμφανίζω στο GUI τα αποτελέσματα των clicks.
Με λίγα λόγια, θέλω να φτιάξω ένα ημερολόγιο το οποίο με κλικ στην ημερομηνία να κάνει export μια μεταβλητή σε ένα bash script (το οποίο το έχω ήδη γράψει) για να τυπώνει την αντίστοιχη γιορτή ανά μέρα. Στη συνέχεια το αποτέλεσμα να εμφανίζεται σε ένα bοx μέσα στο GUI. Το ίδιο γίνεται και με ένα
button το οποίο θα κάνει υπολογισμό του Πάσχα.
Ακολοθούν
Ο κώδικας του αρχείου calendari.glade
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.22.1 -->
<interface>
<requires lib="gtk+" version="3.20"/>
<object class="GtkWindow" id="Εορτολόγιο GTi">
<property name="can_focus">False</property>
<property name="default_width">640</property>
<property name="default_height">400</property>
<child>
<placeholder/>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkCalendar">
<property name="width_request">640</property>
<property name="height_request">100</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="year">2018</property>
<property name="month">11</property>
<property name="day">7</property>
<signal name="day-selected" handler="onDayClicked" object="Εορτολόγιο GTi" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkTextView">
<property name="height_request">100</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscroll_policy">natural</property>
<property name="vscroll_policy">natural</property>
<property name="editable">False</property>
<property name="cursor_visible">False</property>
<property name="overwrite">True</property>
<property name="accepts_tab">False</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton">
<property name="label" translatable="yes">Υπολογισμός Πάσχα</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="always_show_image">True</property>
<signal name="clicked" handler="onButtonPressed" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
</interface>
Και ο κώδικας του python προγράμματος
import gi
import subprocess
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
class Handler:
def onDestroy(self, *args):
Gtk.main_quit()
def onButtonPressed(self, button):
print(subprocess.getoutput("sh easter.sh"))
def onDayClicked(self, button):
print("Hello World!")
builder = Gtk.Builder()
builder.add_from_file("calendari.glade")
builder.connect_signals(Handler())
window = builder.get_object("Εορτολόγιο GTi")
window.show_all()
Gtk.main()