Macht bei euch TextCtrl (1-Zeilig) auch "Geräusche"

Plattformunabhängige GUIs mit wxWidgets.
Antworten
oliver1974
User
Beiträge: 97
Registriert: Donnerstag 26. Oktober 2006, 15:01

Freitag 1. Dezember 2006, 12:03

Hallo zusammen,

Tja, komisches Topic.. ich weiß.

ich entwickle hier gerade auf ner Windows-Kiste, habe jetzt mal
(rein zufällig) den Sound angedreht, und merke, dass in meiner
Anwendung mein 1-Zeiliges TextCtrl jedesmal bei RETURN
ein "Bing" von sich gibt....

Nanu.

Dass es "Bing" macht, wenn ich über die Anzahl der maximal erlaubten
Zeichen für das TextCtrl gehe, ist klar, aber warum auch dann, wenn
ich deutlich drunter bleibe und dann einfach mit RETURN bestätige?

Eventuell vielleicht eine Fokus-Geschichte? Dass wxPython nach
dem Event den Fokus wechseln will und nicht kann?

Hier mal der Event-Handler des Controls.

(Es geht hierbei darum, dass ein Scanner Barcodes
in das TextCtrl schreibt, es wird geprüft, ob nicht
schonmal derselbe Barcode verwendet wurde usw.
Nicht wirklich aufregend, den Rest sieht man wohl am Code.)

Code: Alles auswählen

def EvtChar(self, event):
        if event.GetKeyCode() == wx.WXK_RETURN:
            bc = self.entry_barcode.GetValue()
            
            if not re.compile("\d{" + str(self.BARCODE_MIN_LENGTH)  + 
                              "}").match(bc):
                print "Ungültiger Barcode!" # DEBUG
                self.status_bar.SetStatusText("Ungültiger Barcode!")
            else:
                if bc not in self.barcode_list:
                    self.list_barcode.AppendText(bc + "\r\n")
                    self.barcode_list.append(bc)
                    self.status_bar.SetStatusText("")
                else:
                    print "Bereits vorhanden!" # DEBUG
                    self.status_bar.SetStatusText("Bereits vorhanden!")
            
            self.entry_barcode.SetValue("")
            
        self.entry_barcode.SetFocus()
        event.Skip()
Nun passiert das bei dem "offiziellen" wxPython Demo
(die Anwendung, wo links eine TreeView ist, mit einer Übersicht
der ganzen möglichen wxPython Elementen, und rechts mit
dem DemoCode und der Demo-App selber, ich hoffe ihr kennt das)
bei der Demo zum TextCtrl bei den einzeiligen TextCtrl - Beispielen
ebenso, da ist also auch das "Problem" vorhanden.

Hat da jemand eine Idee?
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Freitag 1. Dezember 2006, 12:23

Hmm, fuer mich klingt das ganz logisch. In einem einzeiligen TextCtrl "darf" man ja kein Enter druecken denn Enter drueckt man normalerweise, um eine neue Zeile anzufangen.
oliver1974
User
Beiträge: 97
Registriert: Donnerstag 26. Oktober 2006, 15:01

Freitag 1. Dezember 2006, 12:53

...oh mann , just als ich die Antwort las, kam mir selber die Idee,
wie das "richtig" sein muß.

Hängt natürlich mit den Events zusammen.

Kleine, aber feine Änderung, man beachte das neue
"else" vor dem "event.Skip()".

Code: Alles auswählen

        if event.GetKeyCode() == wx.WXK_RETURN:
            bc = self.entry_barcode.GetValue()
            
            if not re.compile("\d{" + str(self.BARCODE_MIN_LENGTH)  + 
                              "}").match(bc):
                print "Ungültiger Barcode!" # DEBUG
                # winsound.PlaySound("SystemExit", winsound.SND_ALIAS)
                self.status_bar.SetStatusText("Ungültiger Barcode!")
            else:
                if bc not in self.barcode_list:
                    print bc # DEBUG
                    self.list_barcode.AppendText(bc + "\r\n")
                    self.barcode_list.append(bc)
                    self.status_bar.SetStatusText("")
                else:
                    print "Bereits vorhanden!" # DEBUG
                    self.status_bar.SetStatusText("Bereits vorhanden!")
            
            self.entry_barcode.SetValue("")
        else:
            event.Skip()
            
        self.entry_barcode.SetFocus()
So funktioniert das auch. Danke soweit!!
Antworten