Meine tkinter-Anwendung läuft gut, aber um dbus-Funktionalität zu implementieren, musste ich gobject verwenden. Es funktionierte und alles, abgesehen davon, dass die Hauptloops sowohl von tkinter als auch von gobject ausgeführt werden, bewirkt, dass die Schaltfläche "Fenster schließen" vom Standard-Fenstermanager (Schaltfläche "x" in der Fensterschnittstelle) nicht funktioniert. :/Alles andere funktioniert gut, einschließlich Größenanpassung, Minimierung/Maximierung, Wiederherstellung und Verschieben des Fensters.'Fenster schließen' funktioniert nicht, wenn tkinter + gobject verwendet wird
Jede Hilfe ist willkommen,
Danke,
kleiner Code-Schnipsel:
import dbus
from dbus.service import Object
from dbus.mainloop.glib import DBusGMainLoop
class TBOPlayerDBusInterface (Object):
tboplayer_instance = None
def __init__(self, tboplayer_instance):
self.tboplayer_instance = tboplayer_instance
dbus_loop = DBusGMainLoop()
bus_name = dbus.service.BusName("org.tboplayer.TBOPlayer", bus = dbus.SessionBus(mainloop = dbus_loop))
Object.__init__(self, bus_name, "/org/tboplayer/TBOPlayer")
@dbus.service.method('org.tboplayer.TBOPlayer', in_signature = 'as')
def openFiles(self, files):
self.tboplayer_instance._add_files(files)
# ***************************************
# MAIN
# ***************************************
if __name__ == "__main__":
datestring=" 28 Fev 2017"
dbusif_tboplayer = None
try:
bus = dbus.SessionBus()
bus_object = bus.get_object("org.tboplayer.TBOPlayer", "/org/tboplayer>/TBOPlayer", introspect = False)
dbusif_tboplayer = dbus.Interface(bus_object, "org.tboplayer.TBOPlayer")
except Exception, e:
print e
if dbusif_tboplayer is None:
tk.CallWrapper = ExceptionCatcher
bplayer = TBOPlayer()
TBOPlayerDBusInterface(bplayer)
def refresh_player():
bplayer.root.update()
return True
def run_gobject():
gobject.MainLoop().run()
gobject.idle_add(refresh_player)
bplayer.root.after(100, run_gobject)
bplayer.root.mainloop()
else:
if len(sys.argv[1:]) > 0:
dbusif_tboplayer.openFiles(sys.argv[1:])
exit()