wxpython, key press event an modalen dialog senden

Plattformunabhängige GUIs mit wxWidgets.
Antworten
aba
User
Beiträge: 2
Registriert: Freitag 13. November 2009, 16:48

hallo,

ich habe folgendes wxpython problem.
ich habe einen einfachen modalen dialog gestartet. falls der user nicht reagiert, möchte ich nach einem bestimmten timeout einen event senden der dem drücken der return taste entspricht.

ich habe leider nirgends gefunden, wie ich einen entsprechenden key event erzeugen kann - oder wie man das problem ggf umgehen kann.

mfg
aba
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo aba!

Willkommen im Python-Forum!

Vielleicht so...

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf-8

import wx

wx.SetDefaultPyEncoding("utf-8")


class MyDialog(wx.Dialog):
    
    def __init__(self, parent = None, title = "Example"):
        wx.Dialog.__init__(self, parent, -1, title)
        
        # Pseudo-Buttons :-)
        ok_btn = wx.Button(self, wx.ID_OK, pos = (50, 50))
        cancel_btn = wx.Button(self, wx.ID_CANCEL, pos = (50, 80))
        
        # Timer aktivieren
        self.timer = wx.Timer()
        self.timer.Bind(wx.EVT_TIMER, self.on_timer)
        self.timer.Start(3000, True)
    
    
    def on_timer(self, event = None):
        # Rückgabecode setzen und Dialog ausblenden
        self.SetReturnCode(wx.ID_OK)
        self.Hide()


def main():
    app = wx.PySimpleApp()
    d = MyDialog()
    print "Rueckgabe:", d.ShowModal()
    d.Destroy()


if __name__ == "__main__":
    main()
mfg
Gerold
:-)
Zuletzt geändert von gerold am Samstag 14. November 2009, 09:57, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
aba
User
Beiträge: 2
Registriert: Freitag 13. November 2009, 16:48

hi gerold,

danke!! exakt was ich gesucht habe,

grüsse
aba
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Statt

Code: Alles auswählen

        self.SetReturnCode(wx.ID_OK)
        self.Hide()
würde ich einfach

Code: Alles auswählen

        self.EndModal(wx.ID_OK)
verwenden. Solange der Dialog nur Buttons besitzt, die ihn beenden, funktionieren beide Varianten sicher so, wie Du es möchtest. Wenn aber z.B. auch Texteingaben o.ä. möglich sind, kann der User ja durchaus längere Zeit mit dem Dialog beschäftigt sein. Man sollte dann also jedes Mal, wenn er eine Eingabe macht, den Timer zurücksetzen.
MfG
HWK
Antworten