App chooer and scale buttons


Figure 1: App chooser & scale widgets

This example program demonstrates the use of appchooser buttons when selecting an application from the drop down launch the application loading a test text file, this could be a video or mp3 or any file type.

you can change the application list by modify the content type value in glade this then shows all registered apps for that content type.

#!/usr/bin/env python
from gi.repository import Gtk, GLib, Gio

class application_gui:
    """Tutorial 04 text input, spin input, drop down options"""
    count = 0

    def __init__(self):
	#load in our glade interface
	xml = Gtk.Builder()

	#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('entry1')

	#load our widgets from the glade file
	self.widgets = {}
	self.widgets['scale1'] = xml.get_object('scalebutton1')
	self.widgets['scale2'] = xml.get_object('scalebutton2')
	self.widgets['appchooseraudio'] = xml.get_object('appchooserbutton1')
	self.widgets['appchoosertext'] = xml.get_object('appchooserbutton2')

	self.widgets['appchooseraudio'].connect('changed', self.app_chooser)
	self.widgets['appchoosertext'].connect('changed', self.app_chooser)
	self.widgets['scale1'].connect('value-changed', self.scale)
	self.widgets['scale2'].connect('value-changed', self.scale)

	#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())

	#show the window else there is nothing to see :)

    def app_chooser(self, widget):
	list_view_model = widget.get_model()
	active_iter_index = widget.get_active()
	row_iter = list_view_model.get_iter(active_iter_index)
	app_info = list_view_model.get_value(row_iter, 0)

	gio_file = Gio.File.new_for_path('/tmp/tut07-appchooser-test.txt')
	app_info.launch((gio_file,), None)
	self.text.set_text(widget.get_name() + ' ' + app_info.get_name())

    def scale(self, widget, value):
	self.text.set_text(widget.get_name() + ' ' + str(value))

application = application_gui()