Seite 1 von 1

wxpython, key press event an modalen dialog senden

Verfasst: Freitag 13. November 2009, 16:58
von aba
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

Verfasst: Freitag 13. November 2009, 18:10
von gerold
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
:-)

Verfasst: Samstag 14. November 2009, 01:45
von aba
hi gerold,

danke!! exakt was ich gesucht habe,

grüsse
aba

Verfasst: Samstag 14. November 2009, 18:40
von HWK
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