Clickbaiting
| Anke (encarsia) | Also available in: Deutsch
Switch, checkbox, radiobutton - more elements to click on
This article explains the usage of control and display widgets on the basis of these selected elements. The usage follows the pattern:
create container (box, toolbar etc.) for widget
add element
add an identifier to the element (that step canbe skipped for elements that do not need to be addressed in the source code like boxes or separators)
assign a function to a signal
(optional) test signal emission in Glade preview window
code funtion
All available GTK+ classes and their functions are documented in the Python GI API Reference >> Gtk 3.0 >> Classes.
Glade
Switch
A switch is a widget that posseses two states, on and off. The current status can be retrieved by the state_set signal which is emitted on turning the switch on or off.
Checkbox
Checkboxes are basically just togglebuttons therefore the toggled signal is allocated.
Radiobutton
The purpose of radiobuttons is the selection of _one_ list item. The widget is also a sub class of GtkToggleButton (allocate toggled signal).
Every radio button is a member of a group. This is done via "General > Button Attributes > Group". There is one 'leading' radiobutton that are all other radiobuttons bound to.
Python
Given that checkboxes and radiobuttons are togglebuttons the status is retrieved by the widget.get_active()
function.
When the state_set signal is emitted on the switch a parameter is passed containing the status as boolean (True/False).
def on_switch_state_set(self,widget,state): if state is True: print("switch is on") else: print("switch is off")
Listings
Glade
04_clickableelements.glade (Source)
<?xml version="1.0" encoding="UTF-8"?> <!-- Generated with glade 3.20.0 --> <interface> <requires lib="gtk+" version="3.20"/> <object class="GtkWindow" id="window"> <property name="can_focus">False</property> <property name="default_width">150</property> <signal name="destroy" handler="on_window_destroy" swapped="no"/> <child> <object class="GtkBox"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="margin_left">4</property> <property name="margin_right">4</property> <property name="margin_top">4</property> <property name="margin_bottom">4</property> <property name="orientation">vertical</property> <property name="spacing">1</property> <child> <object class="GtkSwitch" id="switch"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="active">True</property> <signal name="state-set" handler="on_switch_state_set" swapped="no"/> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> <object class="GtkCheckButton" id="cbutton"> <property name="label" translatable="yes">Checkbox</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="active">True</property> <property name="draw_indicator">True</property> <signal name="toggled" handler="on_cbutton_toggled" swapped="no"/> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">2</property> </packing> </child> <child> <object class="GtkSeparator"> <property name="visible">True</property> <property name="can_focus">False</property> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">3</property> </packing> </child> <child> <object class="GtkRadioButton" id="rbutton1"> <property name="label" translatable="yes">Alternative 1</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="active">True</property> <property name="draw_indicator">True</property> <signal name="toggled" handler="on_rbutton1_toggled" swapped="no"/> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">4</property> </packing> </child> <child> <object class="GtkRadioButton" id="rbutton2"> <property name="label" translatable="yes">Alternative 2</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="active">True</property> <property name="draw_indicator">True</property> <property name="group">rbutton1</property> <signal name="toggled" handler="on_rbutton2_toggled" swapped="no"/> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">5</property> </packing> </child> <child> <object class="GtkRadioButton" id="rbutton3"> <property name="label" translatable="yes">Alternative 3</property> <property name="visible">True</property> <property name="can_focus">True</property> <property name="receives_default">False</property> <property name="active">True</property> <property name="draw_indicator">True</property> <property name="group">rbutton1</property> <signal name="toggled" handler="on_rbutton3_toggled" swapped="no"/> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> <property name="position">6</property> </packing> </child> </object> </child> <child> <placeholder/> </child> </object> </interface>
Python
04_clickableelements.py (Source)
#!/usr/bin/python # -*- coding: utf-8 -*- import gi gi.require_version("Gtk", "3.0") from gi.repository import Gtk class Handler: def on_window_destroy(self, *args): Gtk.main_quit() def on_switch_state_set(self, widget, state): if state is True: print("switch is on") else: print("switch is off") def on_cbutton_toggled(self, widget): if widget.get_active(): print("checkbox checked") else: print("checkbox unchecked") def on_rbutton1_toggled(self, widget): if widget.get_active(): print("radiobutton selection changed to 1") def on_rbutton2_toggled(self, widget): if widget.get_active(): print("radiobutton selection changed to 2") def on_rbutton3_toggled(self, widget): if widget.get_active(): print("radiobutton selection changed to 3") class Example: def __init__(self): self.gladefile = "04_clickableelements.glade" self.builder = Gtk.Builder() self.builder.add_from_file(self.gladefile) self.builder.connect_signals(Handler()) window = self.builder.get_object("window") window.show_all() def main(self): Gtk.main() x = Example() x.main()
Comments
Comments powered by Disqus