[PyKDE] KGlobalAccel
Jim Bublitz
jbublitz at nwinternet.com
Mon May 15 23:22:35 BST 2006
On Monday 15 May 2006 02:12, Michał Woźniak wrote:
> Hi there,
>
> I am trying to get my script to register a global hotkey (or "accel" key,
> should I rather say) under KDE 3.4.3. I am using KGlobalAccel, but without
> any success.
> All that I have achieved so far is either:
> - freezing the app (and the keyboard, globally!) after I hit the accel key;
> - crashing the app when I hit the accel key;
> - or some other similar nice behaviour.
> (the code provided below)
>
> I must point out, though, that I am quite new to Python, and a total noob
> to programming GUI apps in it.
>
> Any help/pointers appreciated.
> Cheers
> Mike
>
> P.S.
>
> The code I use is:
> #!/usr/bin/python
> import sys
> import time
>
> from kdecore import *
> from qt import *
> from kdeui import KMainWindow
>
> # the tester
> def tester():
> print '=== TESTER === TESTER === TESTER ==='
> pass
>
> class MainWin (KMainWindow):
> def __init__ (self, *args):
> apply (KMainWindow.__init__, (self,) + args)
> # create the hotkey object
> print 'start'
> shortcut = KShortcut('F11')
> if shortcut == None:
> print 'no, sir!'
> else:
> print shortcut.toString()
> accelObject = KGlobalAccel(self)
> accelObject.insert("Tester", "Tester AccelKey", "A tester accel key",
> shortcut, shortcut, tester)
> accelObject.updateConnections()
> pass
>
> appName = "tester"
> app = KApplication (sys.argv, appName)
> mainWindow = MainWin (None, "main window")
>
> app.exec_loop()
> Send instant messages to your online friends http://uk.messenger.yahoo.com
shortcut is being deleted when you exit the __init__ function - it needs to be
self.shortcut. accelObject should be a QObject with a parent holding a
pointer to it (there's an error in the kglobalaccel.sip file, but it doesn't
change anything yet) - if you make accelObject persistent (self.accelObject),
then instead of locking up the keyboard, the program will segfault in
KGlobalaccelPrivate::activate() when you press the accel key. That's progress
I guess :(
The ctor for KGlobalAccel in sip/kglobalaccel.sip should look like:
KGlobalAccel (QObject*/Transfer/, const char* = 0);
(the /Transfer/ is missing), but that doesn't fix the problem or even change
the results (you also need to run configure.py and recompile if you make that
change).
I'll have to play with is somemore and see what I can figure out. You might
try a C++ version and see if that works.
Jim
More information about the PyQt
mailing list