HotKeys mit wx

Code-Stücke können hier veröffentlicht werden.
Antworten
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

Mittwoch 11. März 2009, 20:06

Sehr geehrtes Python Forum,

ich habe mal - mit hilfe von Gerold (danke nochmal) - ein kleines Script geschrieben mit dem man Hotkey's machen kann.

Code: Alles auswählen

import wx
import thread

wx.SetDefaultPyEncoding("iso-8859-1")


class _IsPressed(wx.Frame):
    def __init__(self, key ,event, parent = None, id = -1, title = "Globale Hotkeys"):
        wx.Frame.__init__(
            self, parent, id, title, style = wx.DEFAULT_FRAME_STYLE | wx.WANTS_CHARS
        )
        self.key=key
        self.event=event
        hotkey_id = wx.NewId()
        print "Register Hotkey:", self.RegisterHotKey(hotkey_id, wx.MOD_NONE, self.key)
        self.Bind(wx.EVT_HOTKEY, self.event, id = hotkey_id)
        
        #self.Bind(wx.EVT_KEY_UP, self.on_frame_key_up)
    def on_frame_key_up(self, event):
        print "KeyCode:", event.GetKeyCode()
"""example: - 
def main():
    app = wx.PySimpleApp()
    
    class Press(_IsPressed):
        def __init__(self):
            self.key=65
            _IsPressed.__init__(self, self.key, self.i)
        def i(self, event):
            from BetaSendKeys import SendKeys as SK
            print "gedrückt"
            
    f=Press()
    #f.Show(False)
    app.MainLoop()


if __name__ == "__main__":
    import time
    thread.start_new_thread(main,())
    while 1:
        print "look, it's a thread"
        time.sleep(3) - """
Ein beispiel ist dabei, also müsstet ihr's verstehen, wenn ihr Fragen habt dann fragt.
Wenn ihr verbesserungsvorschläge habt dann postet sie.

Vielen Dank
INFACT :wink::wink:

PS: kennt jemand eine Möglichkeit, mit der man globale HotKeys abfragen kann, ohne dass die Taste abgefangen wird :wink::wink:
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
INFACT
User
Beiträge: 385
Registriert: Freitag 5. Dezember 2008, 16:08

Montag 30. März 2009, 20:21

Hier ist der Code nochmal geupdatet:

Code: Alles auswählen

import wx
import thread
import time

wx.SetDefaultPyEncoding("iso-8859-1")


__all__ = ["SetHotKey"]

def _SetHotKey(key, event):
    """Function with class of wx""" 
    class _IsPressed(wx.Frame):
        def __init__(self, key ,event, parent = None, id = -1,
                     title = "Globale Hotkeys"):

            wx.Frame.__init__(
                self, parent, id, title,
                style = wx.DEFAULT_FRAME_STYLE | wx.WANTS_CHARS
            )
            self.event = event
            keys = {  #Wx Keys
                "{back}" : 8,
                "{tab}" : 9,
                "{windows right}" : 394,
                "{enter}" : 13,
                "{escape}" : 27,
                "{space}" : 32,
                "{cancel}" : 303,
                "{shift}" : 306,
                "{alt}" : 307,
                "{pause}" : 310,
                "{windows left}" : 393,
                "{end}" : 312,
                "{left}" : 314,
                "{up}" : 315,
                "{right}" : 316,
                "{down}" : 317,
                "{print}" : 319,
                "{numpad 0}" : 324,
                "{numpad 1}" : 325,
                "{numpad 2}" : 326,
                "{numpad 3}" : 327,
                "{numpad 4}" : 328,
                "{numpad 5}" : 329,
                "{numpad 6}" : 330,
                "{numpad 7}" : 331,
                "{numpad 8}" : 332,
                "{numpad 9}" : 333,
                "{f1}" : 340,
                "{f2}" : 341,
                "{f3}" : 342,
                "{f4}" : 343,
                "{f5}" : 344,
                "{f6}" : 345,
                "{f7}" : 346,
                "{f8}" : 347,
                "{f9}" : 348,
                "{f10}" : 349,
                "{f11}" : 350,
                "{f12}" : 351,
                "{f13}" : 352,
                "{f14}" : 353,
                "{f15}" : 354,
                "{f16}" : 355,
                "{f17}" : 356,
                "{f18}" : 357,
                "{f19}" : 358,
                "{f20}" : 359,
                "{f21}" : 360,
                "{f22}" : 361,
                "{f23}" : 362,
                "{f24}" : 363,
                "{prior}" : 366,
                "{page down}" : 367
                }
                
            if key.lower() in keys.iterkeys():
                self.key = keys[key]
            else:   
                self.key=ord(key.upper())
            hotkey_id = wx.NewId()
            self.RegisterHotKey(hotkey_id, wx.MOD_NONE, self.key)
            self.Bind(wx.EVT_HOTKEY, self.hot, id = hotkey_id)
        def hot(self, ev):
            self.event ()   
            
    app = wx.PySimpleApp()
    ex = _IsPressed(key, event)
    app.MainLoop()




def SetHotKey(key, event):
    """Main SetHotKey Funktionkey = the key the hotkey is set on ("a" or "{f1}")
event = the event the hotkey is set on (like thread.start_new_thread(funktion))
    ***event takes NO arguments***"""
    thread.start_new_thread(_SetHotKey, (key, event))


if __name__ == '__main__':
    #Example 
    #press "a" to see more...
    hotkey = False
    def i():
        print "hello world"
        
    SetHotKey("a",i)
    import time
    while 1:
        print "still waiting"
        time.sleep(0.2)
Sollte eigentlich klar sein oder?
Mfg Robin
[b][i]ein kleines game für die die lust haben http://konaminut.mybrute.com[/i][/b]
;-)
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Montag 30. März 2009, 20:31

Naja, aber statisches Zeugs in Funktionen oder Klassen in Funktionen zu definieren ist eigentlich ziemlich doof.
Antworten