Created
July 24, 2022 18:43
-
-
Save renegarcia/5a3e111509c1b50167612ab82977a1d9 to your computer and use it in GitHub Desktop.
Simple date counter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="UTF-8"?> | |
<!-- Generated with glade 3.38.2 --> | |
<interface> | |
<requires lib="gtk+" version="3.24"/> | |
<object class="GtkAdjustment" id="adjustment1"> | |
<property name="upper">100</property> | |
<property name="step-increment">1</property> | |
<property name="page-increment">10</property> | |
</object> | |
<object class="GtkAdjustment" id="adjustment2"> | |
<property name="upper">100</property> | |
<property name="step-increment">1</property> | |
<property name="page-increment">10</property> | |
</object> | |
<object class="GtkAction" id="resetAction"> | |
<property name="label" translatable="yes">Reset</property> | |
<property name="stock-id">gtk-cancel</property> | |
</object> | |
<object class="GtkTextBuffer" id="textbuffer1"/> | |
<object class="GtkWindow" id="window1"> | |
<property name="can-focus">False</property> | |
<child> | |
<!-- n-columns=3 n-rows=3 --> | |
<object class="GtkGrid"> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
<child> | |
<object class="GtkCalendar" id="calendar1"> | |
<property name="visible">True</property> | |
<property name="can-focus">True</property> | |
<property name="year">2021</property> | |
<property name="month">11</property> | |
<property name="day">7</property> | |
</object> | |
<packing> | |
<property name="left-attach">0</property> | |
<property name="top-attach">1</property> | |
</packing> | |
</child> | |
<child> | |
<object class="GtkBox"> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
<property name="orientation">vertical</property> | |
<child> | |
<object class="GtkBox"> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
<child> | |
<object class="GtkLabel"> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
<property name="label" translatable="yes">Total dates selected: </property> | |
</object> | |
<packing> | |
<property name="expand">False</property> | |
<property name="fill">True</property> | |
<property name="position">0</property> | |
</packing> | |
</child> | |
<child> | |
<object class="GtkLabel" id="countLabel"> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
<property name="label" translatable="yes">0</property> | |
<property name="justify">right</property> | |
</object> | |
<packing> | |
<property name="expand">False</property> | |
<property name="fill">True</property> | |
<property name="position">1</property> | |
</packing> | |
</child> | |
<child> | |
<placeholder/> | |
</child> | |
</object> | |
<packing> | |
<property name="expand">False</property> | |
<property name="fill">True</property> | |
<property name="position">0</property> | |
</packing> | |
</child> | |
<child> | |
<object class="GtkScrolledWindow"> | |
<property name="visible">True</property> | |
<property name="can-focus">True</property> | |
<property name="shadow-type">in</property> | |
<child> | |
<object class="GtkTextView" id="text"> | |
<property name="visible">True</property> | |
<property name="can-focus">True</property> | |
<property name="hexpand">True</property> | |
<property name="vexpand">True</property> | |
<property name="hadjustment">adjustment1</property> | |
<property name="vadjustment">adjustment2</property> | |
<property name="editable">False</property> | |
<property name="justification">right</property> | |
<property name="buffer">textbuffer1</property> | |
</object> | |
</child> | |
</object> | |
<packing> | |
<property name="expand">False</property> | |
<property name="fill">True</property> | |
<property name="position">1</property> | |
</packing> | |
</child> | |
<child> | |
<placeholder/> | |
</child> | |
</object> | |
<packing> | |
<property name="left-attach">1</property> | |
<property name="top-attach">1</property> | |
</packing> | |
</child> | |
<child> | |
<object class="GtkMenuBar"> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
<child> | |
<object class="GtkMenuItem"> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
<property name="label" translatable="yes">_File</property> | |
<property name="use-underline">True</property> | |
<child type="submenu"> | |
<object class="GtkMenu"> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
<child> | |
<object class="GtkImageMenuItem"> | |
<property name="label">gtk-new</property> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
<property name="use-underline">True</property> | |
<property name="use-stock">True</property> | |
</object> | |
</child> | |
<child> | |
<object class="GtkImageMenuItem"> | |
<property name="label">gtk-open</property> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
<property name="use-underline">True</property> | |
<property name="use-stock">True</property> | |
</object> | |
</child> | |
<child> | |
<object class="GtkImageMenuItem"> | |
<property name="label">gtk-save</property> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
<property name="use-underline">True</property> | |
<property name="use-stock">True</property> | |
</object> | |
</child> | |
<child> | |
<object class="GtkImageMenuItem"> | |
<property name="label">gtk-save-as</property> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
<property name="use-underline">True</property> | |
<property name="use-stock">True</property> | |
</object> | |
</child> | |
<child> | |
<object class="GtkSeparatorMenuItem"> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
</object> | |
</child> | |
<child> | |
<object class="GtkImageMenuItem"> | |
<property name="label">gtk-quit</property> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
<property name="use-underline">True</property> | |
<property name="use-stock">True</property> | |
</object> | |
</child> | |
</object> | |
</child> | |
</object> | |
</child> | |
<child> | |
<object class="GtkMenuItem"> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
<property name="label" translatable="yes">_Edit</property> | |
<property name="use-underline">True</property> | |
<child type="submenu"> | |
<object class="GtkMenu"> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
<child> | |
<object class="GtkImageMenuItem"> | |
<property name="label">gtk-cut</property> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
<property name="use-underline">True</property> | |
<property name="use-stock">True</property> | |
</object> | |
</child> | |
<child> | |
<object class="GtkImageMenuItem"> | |
<property name="label">gtk-copy</property> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
<property name="use-underline">True</property> | |
<property name="use-stock">True</property> | |
</object> | |
</child> | |
<child> | |
<object class="GtkImageMenuItem"> | |
<property name="label">gtk-paste</property> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
<property name="use-underline">True</property> | |
<property name="use-stock">True</property> | |
</object> | |
</child> | |
<child> | |
<object class="GtkImageMenuItem"> | |
<property name="label">gtk-delete</property> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
<property name="use-underline">True</property> | |
<property name="use-stock">True</property> | |
</object> | |
</child> | |
<child> | |
<object class="GtkImageMenuItem" id="resetMenuItem"> | |
<property name="label">gtk-cancel</property> | |
<property name="related-action">resetAction</property> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
<property name="tooltip-text" translatable="yes">Reset</property> | |
<property name="action-name">resetAction</property> | |
<property name="use-underline">True</property> | |
<property name="use-stock">True</property> | |
</object> | |
</child> | |
</object> | |
</child> | |
</object> | |
</child> | |
<child> | |
<object class="GtkMenuItem"> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
<property name="label" translatable="yes">_View</property> | |
<property name="use-underline">True</property> | |
</object> | |
</child> | |
<child> | |
<object class="GtkMenuItem"> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
<property name="label" translatable="yes">_Help</property> | |
<property name="use-underline">True</property> | |
<child type="submenu"> | |
<object class="GtkMenu"> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
<child> | |
<object class="GtkImageMenuItem"> | |
<property name="label">gtk-about</property> | |
<property name="visible">True</property> | |
<property name="can-focus">False</property> | |
<property name="use-underline">True</property> | |
<property name="use-stock">True</property> | |
</object> | |
</child> | |
</object> | |
</child> | |
</object> | |
</child> | |
</object> | |
<packing> | |
<property name="left-attach">0</property> | |
<property name="top-attach">0</property> | |
</packing> | |
</child> | |
<child> | |
<placeholder/> | |
</child> | |
<child> | |
<placeholder/> | |
</child> | |
<child> | |
<placeholder/> | |
</child> | |
<child> | |
<placeholder/> | |
</child> | |
<child> | |
<placeholder/> | |
</child> | |
<child> | |
<placeholder/> | |
</child> | |
</object> | |
</child> | |
</object> | |
</interface> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
import gi | |
gi.require_version('Gtk', '3.0') | |
from gi.repository import Gtk, GLib, GObject, Gio | |
class application_gui: | |
"""Tutorial 08 menu, calendar widget.""" | |
count = 0 | |
def __init__(self): | |
#load in our glade interface | |
super().__init__() | |
xml = Gtk.Builder() | |
xml.add_from_file('calendar.glade') | |
#grab our widget using get_object this is the name of the widget from glade, window1 is the default name | |
self.window = xml.get_object('window1') | |
self.text = xml.get_object('text').get_buffer() | |
self.dates = set() | |
#load our widgets from the glade file | |
self.widgets = {} | |
self.widgets['calendar'] = xml.get_object('calendar1') | |
self.widgets['countLabel'] = xml.get_object('countLabel') | |
self.widgets['calendar'].select_month(9,2021) | |
#self.widgets['menushow'] = xml.get_object('menuitem6') | |
#self.widgets['menuhide'] = xml.get_object('menuitem7') | |
#self.widgets['menuhello'] = xml.get_object('menuitem8') | |
#connect to events, in this instance just quit our application | |
self.window.connect('delete_event', Gtk.main_quit) | |
self.window.connect('destroy', lambda quit: Gtk.main_quit()) | |
xml.get_object('resetAction').connect('activate', self._reset) | |
#self.widgets['menushow'].connect('activate', self.showcalendar) | |
#self.widgets['menuhide'].connect('activate', self.hidecalendar) | |
#self.widgets['menuhello'].connect('activate', self.hello) | |
self.widgets['calendar'].connect('day-selected-double-click', self.date_selected) | |
#show the window else there is nothing to see :) | |
self.window.show() | |
def _reset(self): | |
self.text.set_text('') | |
self.widgets['countLabel'].set_text('0') | |
self.widgets['calendar'].select_month(7,2021) | |
def hidecalendar(self, *args): | |
self.widgets['calendar'].hide() | |
def showcalendar(self, *args): | |
self.widgets['calendar'].show() | |
def hello(self, *args): | |
self.text.set_text('hello world') | |
def _date_str_to_str(self, date): | |
return str(date[2]) + '-'+str(date[1]+1) + '-' + str(date[0]) | |
def dates_to_str(self): | |
return '\n'.join(map(self._date_str_to_str, sorted(self.dates, reverse=True))) | |
def date_selected(self, *args): | |
date = self.widgets['calendar'].get_date() | |
self.dates.add(date) | |
start,end = self.text.get_bounds() | |
#old_text = self.text.get_text(start,end, False) | |
#new_text = old_text + '\n' + str(date[2]) + '-'+str(date[1]) + '-' + str(date[0]) | |
new_text = self.dates_to_str() | |
self.text.set_text(new_text) | |
self.widgets['countLabel'].set_text(str(len(self.dates))) | |
application = application_gui() | |
Gtk.main() | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment