loop

Fragen zu Tkinter.
Antworten
gorba
User
Beiträge: 100
Registriert: Freitag 28. Juli 2006, 14:58

hallo

ich habe eine mbus instanz, die am ende eines Beispiels mittels

Code: Alles auswählen

mbus.loop() 
geloopt wird. Wenn ich nun aber ein GUI haben möchte, muss ich doch auch z.B.

Code: Alles auswählen

root=Tk()
root.title("blabla")
my_class = MyClass(root)
my_class.setModemAdresses(conf)
GUIFD = my_class
root.mainloop()
aufrufen. Verträgt sich das?
Sinn und Unsinn meiner Worte kommt nie von ungefähr. Das nämlich bin ich, nicht mehr.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

gorba hat geschrieben:Verträgt sich das?
Sofern du mbus ( :?: dbus :?: ) in einem eigenen Thread startest, sollte das gehen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
gorba
User
Beiträge: 100
Registriert: Freitag 28. Juli 2006, 14:58

ok.

Wie muss ich das den anstellen? Mein mbus code sieht bisher so aus:

Code: Alles auswählen

from mbus import entity
from mbus import types
from mbus import guides

import logging

import notifier

def rel_one( adr, val, data = None ):
	pass

def rpc_sum( adr, val, data = None ):
    print "rpc_sum: incoming call from:",adr
    print "building sum of:", val
    res = 0
    for i in val: res += i
#    return None
#    raise guides.RPCException( "failed" )
    return guides.RPCReturn( [ res ],
    	descr = "the sum was calculated successfully" )

def newEntity( maddr ):
    print "New Entity:", str( maddr )

def lostEntity( maddr ):
    print "Lost Entity:", str( maddr )

def unknown( mmessage ):
    print "received unknown message:"
    print mmessage

def transporterror( e ):
    print "Mbus transport error occured:", e

# logging
logging.getLogger().addHandler( logging.StreamHandler() )
#logging.getLogger().setLevel( logging.DEBUG )

# init notifier
notifier.init( notifier.GENERIC )

# create mbus entity
mbus = guides.Instance( "name:rpcsvr type:test lang:python" )

# register special callbacks (optional)
mbus.newEntityFunction      = newEntity
mbus.lostEntityFunction     = lostEntity
mbus.unknownMessageFunction = unknown
mbus.errorFunction          = transporterror

mbus.addRPCCallback( "math.sum", rpc_sum )
mbus.addRPCCallback( "releas.one", rel_one )

try:
    mbus.loop()
#except TypeError, e:
#    print e
except types.MError, e:
    print e.descr
    print e.mmsg
except KeyboardInterrupt:
    pass
Muss ich nun:


# create mbus entity
mbus = guides.Instance( "name:rpcsvr type:test lang:python" )

und
mbus.loop()

in einem separaten thread laufen lassen? Funktionieren danach meine callback funktionen noch?
Sinn und Unsinn meiner Worte kommt nie von ungefähr. Das nämlich bin ich, nicht mehr.
BlackJack

In `rpc_sum()` könntest Du die `sum()`-Funktion verwenden.

Code: Alles auswählen

In [7]: sum([42, 23, 666])
Out[7]: 731
gorba
User
Beiträge: 100
Registriert: Freitag 28. Juli 2006, 14:58

danke für den tipp. Wie kann ich in Python Threads erzeugen? Und code bestimmten threads zuweisen?

ps: hatt sich erledigt. Habe die thread.start_new_thread() funktion verwendet. Thx
Sinn und Unsinn meiner Worte kommt nie von ungefähr. Das nämlich bin ich, nicht mehr.
Antworten