Permalänk
Medlem

Python knappar + bus

Hej!

Sitter och leker lite i python och undrar om någon skulle kunna hjälpa mig med mitt problem. Mitt problem program är i grund och botten ganska simpelt och består enbart av tre knappar, en för att avsluta och sen två för att starta olika processer.

Det jag vill göra är helt enkelt om jag klickar på knapp 1 (btn1) är att köra process1 och om jag klickar på knapp3 (btn3) köra process2.

Min första idé var att ska en ny funktion som man anropar i lyssnaren men då verkade det inte vilja fungera, hände åtminstone inget då man klickade på knappen men kanske var jag som gjorde fel. Det funkar heller inte att lägga alla sådär i init för då körs båda.

Som du ser så återkommer även problemet i on_message.

Troligtvis en rätt simpel lösning men för tillfället känner jag mig blind.

Men hjälp mig gärna med mitt problem och visa gärna hur du menar.

Tack på förhand!

Min kod.

#!/usr/bin/python2.5 # -*- coding: utf-8 -* import sys, os import pygtk, gtk, gobject import pygst pygst.require("0.10") import gst class GTK_Main: def __init__(self): #Lite variabler self.ip = 'xxx.xxx.xxx.xxx' self.port = '3241' window = gtk.Window(gtk.WINDOW_TOPLEVEL) window.set_title("Leka lite") window.set_default_size(500, 400) window.connect("destroy", gtk.main_quit, "WM destroy") vbox = gtk.VBox() window.add(vbox) self.movie_window = gtk.DrawingArea() vbox.add(self.movie_window) hbox = gtk.HBox() vbox.pack_start(hbox, False) hbox.set_border_width(10) hbox.pack_start(gtk.Label()) self.btn1 = gtk.Button("knapp 1") self.btn2.connect("clicked", self.process1) hbox.pack_start(self.btn1, False) self.button2 = gtk.Button("Quit") self.button2.connect("clicked", self.exit) hbox.pack_start(self.button2, False) self.btn3 = gtk.Button("knapp 3") self.btn3.connect("clicked", self.process2) hbox.pack_start(self.btn3, False) hbox.add(gtk.Label()) window.show_all() ####PROCESS 1#### options = "v4l2src ! video/x-raw-yuv,width=320,height=240,framerate=8/1 ! hantro4200enc ! rtph263pay ! udpsink host="+ self.ip +" port="+ self.port +"" self.player3 = gst.parse_launch ( options ) options2 = "udpsrc port="+ self.port +" caps=application/x-rtp,clock-rate=90000 ! rtph263depay ! hantro4100dec ! xvimagesink" self.player4 = gst.parse_launch( options2 ) bus3 = self.player.get_bus() bus3.add_signal_watch() bus3.enable_sync_message_emission() bus3.connect("message", self.on_message) bus3.connect("sync-message::element", self.on_sync_message) bus4 = self.player2.get_bus() bus4.add_signal_watch() bus4.enable_sync_message_emission() bus4.connect("message", self.on_message) bus4.connect("sync-message::element", self.on_sync_message) ####PROCESS 2#### options = "v4l2src ! video/x-raw-yuv,width=320,height=240,framerate=8/1 ! hantro4200enc ! rtph263pay ! udpsink host="+ self.ip +" port="+ self.port +"" self.player = gst.parse_launch ( options ) options2 = "udpsrc port="+ self.port +" caps=application/x-rtp,clock-rate=90000 ! rtph263depay ! hantro4100dec ! xvimagesink" self.player2 = gst.parse_launch( options2 ) bus = self.player.get_bus() bus.add_signal_watch() bus.enable_sync_message_emission() bus.connect("message", self.on_message) bus.connect("sync-message::element", self.on_sync_message) bus2 = self.player2.get_bus() bus2.add_signal_watch() bus2.enable_sync_message_emission() bus2.connect("message", self.on_message) bus2.connect("sync-message::element", self.on_sync_message) #process1 def process1(self, w): if(self.btn1.get_label() == "knapp 1"): self.btn1.set_label("Stop process 1") self.player3.set_state(gst.STATE_PLAYING) self.player4.set_state(gst.STATE_PLAYING) else: self.player3.set_state(gst.STATE_NULL) self.player4.set_state(gst.STATE_NULL) self.btn1.set_label("knapp 1") #process2 def process2(self, w): if self.btn3.get_label() == "knapp 2": self.btn3.set_label("Stop process 2") self.player.set_state(gst.STATE_PLAYING) self.player2.set_state(gst.STATE_PLAYING) else: self.player.set_state(gst.STATE_NULL) self.player2.set_state(gst.STATE_NULL) self.btn3.set_label("knapp 2") def exit(self, widget, data=None): gtk.main_quit() def on_message(self, bus, message): t = message.type if t == gst.MESSAGE_EOS: #### PROCESS 2#### self.player.set_state(gst.STATE_NULL) self.player2.set_state(gst.STATE_NULL) self.button.set_label("knapp 2") ####PROCESS 1#### self.player3.set_state(gst.STATE_NULL) self.player4.set_state(gst.STATE_NULL) self.button.set_label("knapp 1") elif t == gst.MESSAGE_ERROR: err, debug = message.parse_error() print "Error: %s" % err, debug ####PROCESS 2#### self.player.set_state(gst.STATE_NULL) self.player2.set_state(gst.STATE_NULL) self.button.set_label("knapp2") ####PROCESS 1#### self.player3.set_state(gst.STATE_NULL) self.player4.set_state(gst.STATE_NULL) self.button.set_label("knapp 1") def on_sync_message(self, bus, message): if message.structure is None: return message_name = message.structure.get_name() if message_name == "prepare-xwindow-id": imagesink = message.src imagesink.set_property("force-aspect-ratio", True) imagesink.set_xwindow_id(self.movie_window.window.xid) GTK_Main() gtk.gdk.threads_init() gtk.main()