[LÖST] Hur man gör en Tray Icon med Python.

Här diskuteras programmering och utveckling
Användarvisningsbild
HOLMEN
Fadder
Inlägg: 1724
Blev medlem: 29 mar 2006, 22:39
OS: Ubuntu
Utgåva: Vet inte/ingen utgåva passar
Ort: Göteborg
Kontakt:

[LÖST] Hur man gör en Tray Icon med Python.

Inlägg av HOLMEN »

Halloj,

Jag håller på och försöker skapa en tray icon till ett program jag mekar med och jag fattar inte hur allt ska komma ihop. Än så länge har jag iallfall en applet som dyker upp i notifieringsytan, men jag vill att man ska få upp en meny med olik val om man högerklickar på ikonen och att huvudprogrammet kommer upp om man vänsterklickar.

Någton som har någon erfarenhet av detta? Jag använder Python för koden, men själva GTK2+ anropet borde väl vara densamma oavsett språk. Kort sagt så är frågan hur jag ska få in en meny i koden nedan?

Kod: Markera allt

#!/usr/bin/env python

import os
import sys
import gtk

class StatusIcc:

    # activate callback
    def activate( self, widget, data=None):
        dialog = gtk.MessageDialog(
        parent         = None,
        flags          = gtk.DIALOG_DESTROY_WITH_PARENT,
        type           = gtk.MESSAGE_INFO,
        buttons        = gtk.BUTTONS_YES_NO,
        message_format = "This will open SixA's main window")
        dialog.set_title('SixA')
        dialog.connect('response', self.show_hide)
        dialog.show()

   # Show_Hide callback
    def  show_hide(self, widget,response_id, data= None):
        if response_id == gtk.RESPONSE_YES:
                widget.hide()
        else:
                widget.hide()

    # destroyer callback
    def  destroyer(self, widget,response_id, data= None):
        if response_id == gtk.RESPONSE_OK:
                gtk.main_quit()
        else:
                widget.hide()

    # popup callback
    def popup(self, button, widget, data=None):
        dialog = gtk.MessageDialog(
        parent         = None,
        flags          = gtk.DIALOG_DESTROY_WITH_PARENT,
        type           = gtk.MESSAGE_INFO,
        buttons        = gtk.BUTTONS_OK_CANCEL,
        message_format = "Do you really want to quit SixA?")
        dialog.set_title('Popup Window')
        dialog.connect('response', self.destroyer)
        dialog.show()

    def __init__(self):
        # create a new Status Icon
        self.staticon = gtk.StatusIcon()
        self.staticon.set_from_file("sixa-192.png")
        self.staticon.connect("activate", self.activate)
        self.staticon.connect("popup_menu", self.popup)
        self.staticon.set_visible(True)

        # invoking the main()
        gtk.main()

if __name__ == "__main__":
    statusicon = StatusIcc() 
Användarvisningsbild
HOLMEN
Fadder
Inlägg: 1724
Blev medlem: 29 mar 2006, 22:39
OS: Ubuntu
Utgåva: Vet inte/ingen utgåva passar
Ort: Göteborg
Kontakt:

Re: [LÖST] Hur man gör en Tray Icon med Python.

Inlägg av HOLMEN »

Jag gjorde om koden så att den direkt innehöll en meny, men nu vill jag istället veta hur jag kan göra så att jag kan avsluta appleten?

Kod: Markera allt

#!/usr/bin/env python


import os
import gtk

class TrackerStatusIcon(gtk.StatusIcon):
	def __init__(self):
		gtk.StatusIcon.__init__(self)
		# Old Menu
		menu = '''
			<ui>
			<menubar name="Menubar">
				<menu action="Menu">
					   <menuitem action="SixA"/>
					 <separator/>
					   <menuitem action="Setup"/>
					   <menuitem action="Connect"/>
					   <menuitem action="Disconnect"/>
					   <menuitem action="Reset"/>
				 <separator/>
				<menuitem action="About"/>
		 	 	</menu>
			</menubar>
			</ui>
		'''
		# New Menu
#		menu = '''
#			<ui>
#			<menubar name="Menubar">
#				<menu action="Menu">
#					   <menuitem action="SixA"/>
#				<menu action="Commands">
#					   <menuitem action="Setup"/>
#					   <menuitem action="Connect"/>
#					   <menuitem action="Disconnect"/>
#					   <menuitem action="Reset"/>
#				</menu>
#				<menuitem action="About"/>
#		 	 	</menu>
#			</menubar>
#			</ui>
#		'''

		actions = [
			('Menu',  None, 'Menu'),
			('SixA', None, 'Open _SixA', None, 'Manage your PS3 gamepadr', self.on_activate),
			('Setup', gtk.STOCK_ADD, '_Setup', None, 'Setup gamepads', self.on_setup),
			('Connect', gtk.STOCK_CONNECT, '_Connect', None, 'Connect gamepad', self.on_connect),
			('Disconnect', gtk.STOCK_DISCONNECT, '_Disconnect', None, 'Disconnect gamepad', self.on_disconnect),
			('Reset', gtk.STOCK_REMOVE, '_Reset', None, 'Reset Bluetooth', self.on_reset),
			('About', gtk.STOCK_ABOUT, '_About', None, 'About SixA', self.on_about)]
		ag = gtk.ActionGroup('Actions')
		ag.add_actions(actions)
		self.manager = gtk.UIManager()
		self.manager.insert_action_group(ag, 0)
		self.manager.add_ui_from_string(menu)
		self.menu = self.manager.get_widget('/Menubar/Menu/About').props.parent
		search = self.manager.get_widget('/Menubar/Menu/SixA')
#		search = self.manager.get_widget('/Menubar/Menu/Commands/Setup')
#		search = self.manager.get_widget('/Menubar/Menu/Commands/Connect')
#		search = self.manager.get_widget('/Menubar/Menu/Commands/Disconnect')
#		search = self.manager.get_widget('/Menubar/Menu/Commands/Reset')
		search.get_children()[0].set_markup('<b>Open _SixA</b>')
		search.get_children()[0].set_use_underline(True)
		search.get_children()[0].set_use_markup(True)
		self.set_from_file("sixa-192.png")
		self.set_tooltip('Manage your PS3 gamepad.')
		self.set_visible(True)
		self.connect('activate', self.on_activate)
		self.connect('popup-menu', self.on_popup_menu)

	# Runs SixA - the actual GUI
	def on_activate(self, data):
		os.spawnlpe(os.P_NOWAIT, 'sixa', os.environ)

	def on_popup_menu(self, status, button, time):
		self.menu.popup(None, None, None, button, time)


	# Actions like connect, disconnect...
	def on_setup(self, data):
		print 'sixa setup'

	def on_connect(self, data):
		print 'sixa connect'

	def on_disconnect(self, data):
		print 'sixa disconect'

	def on_reset(self, data):
		print 'sixa reset'

	# Shows the about dialog.
	def on_about(self, data):
        	dialog = gtk.AboutDialog()
		dialog.set_logo(gtk.gdk.pixbuf_new_from_file("sixa-192.png"))
	        dialog.set_name('SixA')
	        dialog.set_version('0.1')
        	dialog.set_comments('Manage your PS3 gamepad.')
        	dialog.set_website('http://www.launchpad.net/gsixaxis')
        	dialog.run()
        	dialog.destroy()

if __name__ == '__main__':
	TrackerStatusIcon()
	gtk.main()
Skriv svar

Återgå till "Programmering och webbdesign"