Funktionsaufruf im event handler

Hallo, ich habe folgendes Problem, welches vielleicht mehr am event- System des GUI- Toolkits liegt als an Python. Ich benutze wxPython für meine Anwendung und wie ich festgestellt habe ist es offensichtlich nicht möglich im Eventhandler weitere Funktionen aufzurufen? Wie würde man das Problem am sinnvollsten lösen? Bevor wieder Beschwerden wegen der Python Coding Richtline kommen, die hab ich hier noch nicht berücksichtigt, gelobe aber Besserung. Hier der Code: def OnSelDevice(self, event): selDeviceArgsList = [] try: if self.gpib_bus == 0: self.gpib_bus = GPIB_Bus() device = SelDeviceDialog(None, -1, "Device Select Dialog", self.gpib_bus.devices, self.checkedDevices) device.ShowModal() self.checkedDevices = device.deviceListBox.Checked if len(self.checkedDevices) > 0: for i in device.deviceListBox.CheckedStrings: selDevArgs = i.split(" : ") selDeviceArgsList.append(selDevArgs) status = update_intruments(selDeviceArgsList) if len(self.instruments): self.menu_item_testsettings.Enable(True) except: noBusDlg = wx.MessageDialog(None, 'No GPIB Device available. Remote measurement is not possible', 'Information', wx.CANCEL | wx.ICON_INFORMATION, pos=wx.DefaultPosition) noBusDlg.ShowModal() noBusDlg.Destroy() device.Destroy() def update_intruments(self, clicked_devices): clicked_serials = [] for i in clicked_devices: clicked_serials.append(clicked_devices[1]) for i in self.used_gpib_serials: if i not in clicked_serials: #wurde ein bereits verwendetes Gerät abgewählt? removeInstrument(i) for i in clicked_serials: if i not in self.used_gpib_serials: #wurde ein noch nicht verwendetes Gerät angewählt? success = addInstrument(i) return success def addInstrument(self, instrumentID): modell_nummer = self.gpib_bus.get_model(instrumentID) if modell_nummer == "34405A": self.instruments.append(Agilent.Agilent34405A(self.gpib_bus, instrumentID)) last_added = len(self.instruments)-1 self.used_gpib_serials.append(self.instruments[last_added].serial_nr) retval = True else: retval = False return retval Schon jetzt recht herzlichen Dank Frank -- Bevor Sie diese E-Mail ausdrucken, überlegen Sie bitte, ob dies wirklich erforderlich ist. Please think before you print. -- WIKA Alexander Wiegand SE & Co. KG Alexander-Wiegand-Straße 30 - 63911 Klingenberg - Germany Kommanditgesellschaft: Sitz Klingenberg - Amtsgericht Aschaffenburg HRA 1819 Komplementärin: WIKA Verwaltungs SE & Co. KG - Sitz Klingenberg - Amtsgericht Aschaffenburg HRA 4685 Komplementärin: WIKA International SE - Sitz Klingenberg - Amtsgericht Aschaffenburg HRB 10505 Vorstand: Alexander Wiegand Vorsitzender des Aufsichtsrats: Dr. Max Egli Telefon: (09372) 132-0 Internet: www.wika.com -- The information contained in this E-Mail and any attached files are strictly confidential and may be subject to legal privilege. If you are not the intended recipient, his representative or the person responsible for delivering the message to the intended recipient, be advised that you have received this message in error and that any dissemination, copying or use of this message or attachment is strictly forbidden, as is the disclosure of the information therein. If you have received this E-Mail in error, please notify us immediately by E-Mail or telephone and delete this message and all its attachments subsequently. All reasonable precautions have been taken to ensure no viruses are present in this E-Mail.

ich habe folgendes Problem, welches vielleicht mehr am event- System des GUI- Toolkits liegt als an Python. Ich benutze wxPython für meine Anwendung und wie ich festgestellt habe ist es offensichtlich nicht möglich im Eventhandler weitere Funktionen aufzurufen? Wie würde man das Problem am sinnvollsten lösen?
Und welches Problem jetzt genau? Du kannst wohl kaum erwarten, dass wir das hier so einfach zum laufen bringen, noch indizierst du in deinem Code-Snippet da unten, wann du wo was tust oder tun willst, dass dann nicht funktioniert. Glaskugeln befragen ist schon fuer verschollene Haustiere eher suboptimal, Probleme im Code loest man damit nahezu nie Aber eine Antwort kann man schon mal geben: deine Analyse ist ebenso offensichtlich falsch, wie du sie offensichtlich findest. Natuerlich kann man in Eventhandlern weitere Funktionen aufrufen.
Bevor wieder Beschwerden wegen der Python Coding Richtline kommen, die hab ich hier noch nicht berücksichtigt, gelobe aber Besserung.
Besserung geloben unsere Politiker auch immer es gaebe ne Menge zu sagen, aber du magst ja nix davon hoeren. Es bestaende die Gefahr, zum besseren Programmierer zu werden Diez

Hallo, Besserung geloben unsere Politiker auch immer... es gaebe ne Menge zu sagen, aber du magst ja nix davon hoeren. Es bestaende die Gefahr, zum besseren Programmierer zu werden... Der Code besteht schon länger und ich habe ihn nicht extra an die Coding Richtlinie angepasst. Coding Richtlinien gibt es wie Sand am mehr (vielleicht nicht für Python) deshalb zu behaupten dass der, der eine andere Richtlinie benutzt ein schlechter Programmierer ist finde ich etwas kurzsichtig. Im Übrigen gibt es in dem Eventhandler nur einen selbst definierten Funktionsaufruf nämlich update_instruments(). Die Definition der Methode kommt gleich am Anschluss an den Eventhandler. Und ich will nicht das ihr mir das zum laufen bringt. Es geht mir vor allem darum es besser zu machen, bevor ich den Inhalt der Funktionen update_instruments() und add_instrument dort einfach reinschreibe. Auch vor dem Hintergrund ein besserer Programmierer zu werden :) Für Kritik wie man es besser machen kann bin ich immer offen. Es sollte sich halt nicht darauf beschränken ob mit einer Variablen nun klein oder groß begonnen wird oder Unterstriche zu setzen sind oder nicht. Gruß Frank -- Bevor Sie diese E-Mail ausdrucken, überlegen Sie bitte, ob dies wirklich erforderlich ist. Please think before you print. -- WIKA Alexander Wiegand SE & Co. KG Alexander-Wiegand-Straße 30 - 63911 Klingenberg - Germany Kommanditgesellschaft: Sitz Klingenberg - Amtsgericht Aschaffenburg HRA 1819 Komplementärin: WIKA Verwaltungs SE & Co. KG - Sitz Klingenberg - Amtsgericht Aschaffenburg HRA 4685 Komplementärin: WIKA International SE - Sitz Klingenberg - Amtsgericht Aschaffenburg HRB 10505 Vorstand: Alexander Wiegand Vorsitzender des Aufsichtsrats: Dr. Max Egli Telefon: (09372) 132-0 Internet: www.wika.com -- The information contained in this E-Mail and any attached files are strictly confidential and may be subject to legal privilege. If you are not the intended recipient, his representative or the person responsible for delivering the message to the intended recipient, be advised that you have received this message in error and that any dissemination, copying or use of this message or attachment is strictly forbidden, as is the disclosure of the information therein. If you have received this E-Mail in error, please notify us immediately by E-Mail or telephone and delete this message and all its attachments subsequently. All reasonable precautions have been taken to ensure no viruses are present in this E-Mail.

Hallo Frank, was Diez dir wahrscheinlich mitteilen wollte war: Lies mal nochmal über deine Mail und versetze dich dabei in unsere Lage. Dann wirst du evtl. folgendes feststellen: - Da steht jede Menge schlecht lesbarer Code. Die schlechte Lesbarkeit scheint dir bewußt zu sein. Daher sagst du gleich mal an, daß du keine Kritik daran hören willst. - Da steht zwar, daß du ein Problem hast, aber nicht wirklich welches. Wenn du offensichtlich etwas festgestellt hast, warum fragst du dann noch? Wenn du hier Hilfe bekommen willst, solltest du daran denken, daß wir aus Spaß an der Freude freiwillig antworten. Warum sollte sich jemand die Mühe machen, erstmal rauszufinden, was überhaupt dein Problem ist? Zumal du sogar schon angibst, was du nicht als Antwort akzeptieren wirst? Diez hätte übrigens auch einfach "Doch, geht!" antworten können, was die absolut korrekte Antwort auf deine Frage ist. Hat er aber nicht, weil hier freundliche hilfsbereite Menschen unterwegs sind. Die aber nicht deine Arbeit machen werden. ;-) Grüße, Achim Am 10.09.2013 um 16:13 schrieb Wagner, Frank:
Hallo,
Besserung geloben unsere Politiker auch immer… es gaebe ne Menge zu sagen, aber du magst ja nix davon hoeren. Es bestaende die Gefahr, zum besseren Programmierer zu werden…
Der Code besteht schon länger und ich habe ihn nicht extra an die Coding Richtlinie angepasst. Coding Richtlinien gibt es wie Sand am mehr (vielleicht nicht für Python) deshalb zu behaupten dass der, der eine andere Richtlinie benutzt ein schlechter Programmierer ist finde ich etwas kurzsichtig.
Im Übrigen gibt es in dem Eventhandler nur einen selbst definierten Funktionsaufruf nämlich update_instruments(). Die Definition der Methode kommt gleich am Anschluss an den Eventhandler. Und ich will nicht das ihr mir das zum laufen bringt. Es geht mir vor allem darum es besser zu machen, bevor ich den Inhalt der Funktionen update_instruments() und add_instrument dort einfach reinschreibe. Auch vor dem Hintergrund ein besserer Programmierer zu werden J
Für Kritik wie man es besser machen kann bin ich immer offen. Es sollte sich halt nicht darauf beschränken ob mit einer Variablen nun klein oder groß begonnen wird oder Unterstriche zu setzen sind oder nicht.
Gruß
Frank --
-- P Bevor Sie diese E-Mail ausdrucken, überlegen Sie bitte, ob dies wirklich erforderlich ist. Please think before you print. -- WIKA Alexander Wiegand SE & Co. KG Alexander-Wiegand-Straße 30 - 63911 Klingenberg - Germany Kommanditgesellschaft: Sitz Klingenberg - Amtsgericht Aschaffenburg HRA 1819 Komplementärin: WIKA Verwaltungs SE & Co. KG - Sitz Klingenberg - Amtsgericht Aschaffenburg HRA 4685 Komplementärin: WIKA International SE - Sitz Klingenberg - Amtsgericht Aschaffenburg HRB 10505 Vorstand: Alexander Wiegand Vorsitzender des Aufsichtsrats: Dr. Max Egli Telefon: (09372) 132-0 Internet: www.wika.com -- The information contained in this E-Mail and any attached files are strictly confidential and may be subject to legal privilege. If you are not the intended recipient, his representative or the person responsible for delivering the message to the intended recipient, be advised that you have received this message in error and that any dissemination, copying or use of this message or attachment is strictly forbidden, as is the disclosure of the information therein. If you have received this E-Mail in error, please notify us immediately by E-Mail or telephone and delete this message and all its attachments subsequently. All reasonable precautions have been taken to ensure no viruses are present in this E-Mail. _______________________________________________ python-de maillist - python-de@python.org https://mail.python.org/mailman/listinfo/python-de

Hallo,
Besserung geloben unsere Politiker auch immer es gaebe ne Menge zu sagen, aber du magst ja nix davon hoeren. Es bestaende die Gefahr, zum besseren Programmierer zu werden
Der Code besteht schon länger und ich habe ihn nicht extra an die Coding Richtlinie angepasst. Coding Richtlinien gibt es wie Sand am mehr (vielleicht nicht für Python) deshalb zu behaupten dass der, der eine andere Richtlinie benutzt ein schlechter Programmierer ist finde ich etwas kurzsichtig.
Wo habe ich das denn behauptet? Coding-Richtlinien haben nichts per se mit der Qualitaet von Code zu tun, sondern mit der Kommunikation ueber Code. Und eben diese wird durch eine solche Richtlinie vereinfacht. Aber genau das ist der Knackpunkt. Du willst, das wir ueber deinen Code reden. Aber bitte nur so, wie du dir das vorstellst, und gefaelligst nicht ueber Dinge, die dir nicht unmittelbar weiterhelfen. Zumindest das ist das, was bei mir bei so einer Anforderung mitschwingt. Und in Python reden wir ueblicherweise auch "nur" ueber PEP8, und nicht ueber beliebig viele ander Konventionen. Und die ist noch nicht mal besonders umfangreich oder schwierig zu implementieren.
Im Übrigen gibt es in dem Eventhandler nur einen selbst definierten Funktionsaufruf nämlich update_instruments(). Die Definition der Methode kommt gleich am Anschluss an den Eventhandler. Und ich will nicht das ihr mir das zum laufen bringt. Es geht mir vor allem darum es besser zu machen, bevor ich den Inhalt der Funktionen update_instruments() und add_instrument dort einfach reinschreibe. Auch vor dem Hintergrund ein besserer Programmierer zu werden J
Nochmal: das steht da nirgends, dass das der Aspekt ist, der nicht funktioniert. Das mag man mit viel Muehe erraten, aber es ist nicht klar. Ein Kommentar wie "hier krachts mit folgender Exception" oder aehnliches hilft. Und in dem Moment, wo du diese Zusatzinfo gibst, kann man auch gleich was dazu sagen: dein "try: except:" ist (ganz generell, und das ist eine Konvention, ueber die nicht zu reden du dir ja ausbedungen hast) ein schlechte Idee. Weil es zB Programmierfehler maskiert, die man gemacht hat, statt explizit Ausnahmen zu behandeln, die aus dem Anwendungscode kommen koennen. Wie es in PEP8 steht: """ When catching exceptions, mention specific exceptions whenever possible instead of using a bare except: clause. For example, use: try: import platform_specific_module except ImportError: platform_specific_module = None A bare except: clause will catch SystemExit and KeyboardInterrupt exceptions, making it harder to interrupt a program with Control-C, and can disguise other problems. If you want to catch all exceptions that signal program errors, use except Exception: (bare except is equivalent to except BaseException:). A good rule of thumb is to limit use of bare 'except' clauses to two cases: If the exception handler will be printing out or logging the traceback; at least the user will be aware that an error has occurred. If the code needs to do some cleanup work, but then lets the exception propagate upwards with raise. try...finally can be a better way to handle this case. """ Und ich vermute mal stark, das dein Problem da liegt. Aber wollteste ja nicht wissen
Für Kritik wie man es besser machen kann bin ich immer offen. Es sollte sich halt nicht darauf beschränken ob mit einer Variablen nun klein oder groß begonnen wird oder Unterstriche zu setzen sind oder nicht.
Und selbst wenn's nur das waere dann ignorier das halt. Oder nimm mit, dass es hier hilft, deinen Code so zu praesentieren, dass er formell gewissen Anspruechen genuegt. Aber Leuten, die dir freiwillig helfen sollen, Vorschriften darueber zu machen, wie sie das gefaelligst zu tun haben das finde ich persoenlich zumindest ein bisschen anmassend. Diez

Diez Roggisch:
Und in Python reden wir ueblicherweise auch "nur" ueber PEP8, und nicht ueber beliebig viele ander Konventionen. Und die ist noch nicht mal besonders umfangreich oder schwierig zu implementieren.
Und sie ist sogar automatisierbar: https://pypi.python.org/pypi/autopep8 Cheers, Dinu PS: BTW, gibt es eine Studie zum Zusammenhang der Signature-Länge eines Mailinglisten-Abonnenten und irgendwelchen persönlichen Merkmalen?

On 9/10/13 4:49 PM, "Dinu Gherman" <gherman@darwin.in-berlin.de> wrote:
Diez Roggisch:
Und in Python reden wir ueblicherweise auch "nur" ueber PEP8, und nicht ueber beliebig viele ander Konventionen. Und die ist noch nicht mal besonders umfangreich oder schwierig zu implementieren.
Und sie ist sogar automatisierbar:
https://pypi.python.org/pypi/autopep8
Cheers,
Dinu
PS: BTW, gibt es eine Studie zum Zusammenhang der Signature-Länge eines Mailinglisten-Abonnenten und irgendwelchen persönlichen Merkmalen?
Autsch, der geht etwas zu tief, findste nicht? Ich behaupte mal, die meisten Signaturen sind Vorgaben irgendwelcher Rechtsabeiteilungen. So ist das zumindest bei uns. Und da hat dann alles moegliche zu stehen, vom Vorstand bis zum Vorarbeiter. LG Diez

Hi, tja hab ich keinen Einfluss drauf wird vom Mailserver beim Posten mit angehängt. Finde es aber gut dass man sich über die wesentlichen Sachen hier Gedanken macht :-) Gruß Frank
Diez Roggisch:
Und in Python reden wir ueblicherweise auch "nur" ueber PEP8, und nicht ueber beliebig viele ander Konventionen. Und die ist noch nicht mal besonders umfangreich oder schwierig zu implementieren.
Und sie ist sogar automatisierbar:
https://pypi.python.org/pypi/autopep8
Cheers,
Dinu
PS: BTW, gibt es eine Studie zum Zusammenhang der Signature-Länge eines Mailinglisten-Abonnenten und irgendwelchen persönlichen Merkmalen?
Autsch, der geht etwas zu tief, findste nicht? Ich behaupte mal, die meisten Signaturen sind Vorgaben irgendwelcher Rechtsabeiteilungen. So ist das zumindest bei uns. Und da hat dann alles moegliche zu stehen, vom Vorstand bis zum Vorarbeiter. LG Diez -- Bevor Sie diese E-Mail ausdrucken, überlegen Sie bitte, ob dies wirklich erforderlich ist. Please think before you print. -- WIKA Alexander Wiegand SE & Co. KG Alexander-Wiegand-Straße 30 - 63911 Klingenberg - Germany Kommanditgesellschaft: Sitz Klingenberg - Amtsgericht Aschaffenburg HRA 1819 Komplementärin: WIKA Verwaltungs SE & Co. KG - Sitz Klingenberg - Amtsgericht Aschaffenburg HRA 4685 Komplementärin: WIKA International SE - Sitz Klingenberg - Amtsgericht Aschaffenburg HRB 10505 Vorstand: Alexander Wiegand Vorsitzender des Aufsichtsrats: Dr. Max Egli Telefon: (09372) 132-0 Internet: www.wika.com -- The information contained in this E-Mail and any attached files are strictly confidential and may be subject to legal privilege. If you are not the intended recipient, his representative or the person responsible for delivering the message to the intended recipient, be advised that you have received this message in error and that any dissemination, copying or use of this message or attachment is strictly forbidden, as is the disclosure of the information therein. If you have received this E-Mail in error, please notify us immediately by E-Mail or telephone and delete this message and all its attachments subsequently. All reasonable precautions have been taken to ensure no viruses are present in this E-Mail.

Diez Roggisch:
PS: BTW, gibt es eine Studie zum Zusammenhang der Signature-Länge eines Mailinglisten-Abonnenten und irgendwelchen persönlichen Merkmalen?
Autsch, der geht etwas zu tief, findste nicht?
Ich behaupte mal, die meisten Signaturen sind Vorgaben irgendwelcher Rechtsabeiteilungen. So ist das zumindest bei uns. Und da hat dann alles moegliche zu stehen, vom Vorstand bis zum Vorarbeiter.
Sorry, war keineswegs so ätzend gemeint! Persönliche Merkmale sind ein weites Feld, sozusagen schon bei "Big Data" angekommen (siehe z.B. FaceBook und Co.). Ich vermute jedoch, dass in einem freien Land (tm) niemand von seinem Arbeitgeber gezwungen wird, auf öffentlichen Mailinglisten seine Firmenadresse zu benutzen und dort irgendwelche Spuren zu hinterlassen, die man nur Milimeter entfernt vom Begriff Spam einordnen könnte. Und wenn doch, dann herzliches Beileid zu diesem Umfeld! Gruß, Dinu

Hallo Diez, hallo Achim, natürlich ist mir bewusst, dass mein Code nicht gut zu lesen ist, das mag daran liegen, dass ich als Elektronikentwickler relativ kurzfristig im Auftrag meines Arbeitgebers einige GUI Anwendungen erstellen sollte und deshalb etwas pragmatisch an das Problem herangetreten bin. Python nutzte ich bisher um Messabläufe von Versuchsanordnungen zu automatisieren insofern ist dies Neuland für mich und bedeutete learning by doing. Die Bemerkung: "Bevor wieder Beschwerden wegen der Python Coding Richtline kommen, die hab ich hier noch nicht berücksichtigt, gelobe aber Besserung" Ist diesem Umstand geschuldet und soll nur darauf hinweisen, dass mir die schlechte Lesbarkeit klar ist. An Politiker hab ich dabei nicht gedacht. Akzeptieren muss und werde ich jede Antwort Ich stelle keineswegs in Abrede dass die PEP8 mir ein guter Leitfanden für besser lesbaren Code sein wird, es muss aber auch einleuchten, dass ich mir nicht die Zeit nehmen kann alles neu zu schreiben. Und aus Unkenntnis hatten sich ein Kollege und ich auf diesen Coding-Style (betrifft nur Schreibweise von Klassen, Variablen und Methoden) geeinigt. Genau solche Kritik wie sie Diez bezüglich des try und except angebracht hat finde ich vollkommen in Ordnung. Selbstverständlich ist mir klar, dass hier jeder aus freien Stücken hilft auch ich helfe in Foren und Mailinglisten wenn mir das möglich ist, allerdings sind die Problemstellungen hier so fortgeschritten dass ich kaum etwas beitragen kann. Ich verlange von keinem hier meine Arbeit zu machen und niemand hier wird jemals erlebt haben, dass ich eine Aufgabenstellung gepostet habe und um Code als Lösung gebeten habe. Falls sich das von Dir Achim erwähnte "Doch geht" darauf bezogen hat, dass es möglich ist in einem wx Event eine eigene Funktion aufzurufen. Hätte ich damit auch leben können und wäre wieder auf die Suche nach meinem Fehler gegangen. Allerdings ist es so, dass ich beim schrittweise debuggen an der Funktion update_instruments() ankomme, will ich nun mit dem nächsten Schritt in die Funktion springen übergibt der Debugger wieder den Focus an mein GUI. Was mich zu der Annahme kommen ließ, dass das event damit beendet wird. Ich bin ohnehin der Meinung dass eine Problembeschreibung insofern sinnvoller ist da zu früh geposteter Code den Leser zum einen zu sehr vom Problem ablenkt und den Poster dazu verleitet das Problem nur ungenügend genau zu beschreiben. Trotzdem vielen Dank an alle die sich die Zeit genommen haben sich mit meinem Problem zu beschäftigen. Viele Grüße Frank -- Bevor Sie diese E-Mail ausdrucken, überlegen Sie bitte, ob dies wirklich erforderlich ist. Please think before you print. -- WIKA Alexander Wiegand SE & Co. KG Alexander-Wiegand-Straße 30 - 63911 Klingenberg - Germany Kommanditgesellschaft: Sitz Klingenberg - Amtsgericht Aschaffenburg HRA 1819 Komplementärin: WIKA Verwaltungs SE & Co. KG - Sitz Klingenberg - Amtsgericht Aschaffenburg HRA 4685 Komplementärin: WIKA International SE - Sitz Klingenberg - Amtsgericht Aschaffenburg HRB 10505 Vorstand: Alexander Wiegand Vorsitzender des Aufsichtsrats: Dr. Max Egli Telefon: (09372) 132-0 Internet: www.wika.com -- The information contained in this E-Mail and any attached files are strictly confidential and may be subject to legal privilege. If you are not the intended recipient, his representative or the person responsible for delivering the message to the intended recipient, be advised that you have received this message in error and that any dissemination, copying or use of this message or attachment is strictly forbidden, as is the disclosure of the information therein. If you have received this E-Mail in error, please notify us immediately by E-Mail or telephone and delete this message and all its attachments subsequently. All reasonable precautions have been taken to ensure no viruses are present in this E-Mail.

Hallo Frank, PEP 8 usw. spare ich mir. Da macht wohl eher der Ton die Musik. Deine Mail enthält jetzt aber schon deutlich mehr Details als deine ursprüngliche Nachricht, obwohl kein Code darin vor kommt. Ich bin kein kein wx-Experte, würde aber mal stark vermuten, daß ein Debugger im Zusammenspiel mit einer GUI Library durchaus mal zu seltsamen Effekten führen kann. Wie dem auch sei: Was "deine Arbeit" ist, liegt im Auge des Betrachters. Aus meiner Sicht ist es z.B. deine Arbeit, das Problem auf ein minimales reproduzierbares Beispiel einzudampfen. Mit wx sollte es möglich sein, ein minimales Beispiel zu bauen, das in einem Eventhandler eine Funktion aufruft. Dann gibt's zwei Möglichkeiten: Dein Problem ist mit dem minimalen Beispiel reproduzierbar. Dann kann jeder in dieser Liste das minimale Beispiel ausführen oder dank des deutlichen kürzeren Codes einfach so dein Problem erkennen. Oder das Problem besteht im minimalen Beispiel nicht. Dann mußt du schauen, was in deinem konkreten Code anders ist. Das ist der erste Schritt zum erfolgreichen Debugging. Wenn du dann den genauen Punkt hast, ab dem das Problem auftritt, wird's dir wie Schuppen von den Augen fallen - oder du kannst eine sehr konkrete praktische Frage in dieser Liste stellen. ;-) Grüße, Achim Am 10.09.2013 um 18:03 schrieb Wagner, Frank:
Hallo Diez, hallo Achim,
natürlich ist mir bewusst, dass mein Code nicht gut zu lesen ist, das mag daran liegen, dass ich als Elektronikentwickler relativ kurzfristig im Auftrag meines Arbeitgebers einige GUI Anwendungen erstellen sollte und deshalb etwas pragmatisch an das Problem herangetreten bin. Python nutzte ich bisher um Messabläufe von Versuchsanordnungen zu automatisieren insofern ist dies Neuland für mich und bedeutete learning by doing.
Die Bemerkung: „Bevor wieder Beschwerden wegen der Python Coding Richtline kommen, die hab ich hier noch nicht berücksichtigt, gelobe aber Besserung“ Ist diesem Umstand geschuldet und soll nur darauf hinweisen, dass mir die schlechte Lesbarkeit klar ist. An Politiker hab ich dabei nicht gedacht. Akzeptieren muss und werde ich jede Antwort
Ich stelle keineswegs in Abrede dass die PEP8 mir ein guter Leitfanden für besser lesbaren Code sein wird, es muss aber auch einleuchten, dass ich mir nicht die Zeit nehmen kann alles neu zu schreiben. Und aus Unkenntnis hatten sich ein Kollege und ich auf diesen Coding-Style (betrifft nur Schreibweise von Klassen, Variablen und Methoden) geeinigt.
Genau solche Kritik wie sie Diez bezüglich des try und except angebracht hat finde ich vollkommen in Ordnung.
Selbstverständlich ist mir klar, dass hier jeder aus freien Stücken hilft auch ich helfe in Foren und Mailinglisten wenn mir das möglich ist, allerdings sind die Problemstellungen hier so fortgeschritten dass ich kaum etwas beitragen kann.
Ich verlange von keinem hier meine Arbeit zu machen und niemand hier wird jemals erlebt haben, dass ich eine Aufgabenstellung gepostet habe und um Code als Lösung gebeten habe.
Falls sich das von Dir Achim erwähnte „Doch geht“ darauf bezogen hat, dass es möglich ist in einem wx Event eine eigene Funktion aufzurufen. Hätte ich damit auch leben können und wäre wieder auf die Suche nach meinem Fehler gegangen. Allerdings ist es so, dass ich beim schrittweise debuggen an der Funktion update_instruments() ankomme, will ich nun mit dem nächsten Schritt in die Funktion springen übergibt der Debugger wieder den Focus an mein GUI. Was mich zu der Annahme kommen ließ, dass das event damit beendet wird.
Ich bin ohnehin der Meinung dass eine Problembeschreibung insofern sinnvoller ist da zu früh geposteter Code den Leser zum einen zu sehr vom Problem ablenkt und den Poster dazu verleitet das Problem nur ungenügend genau zu beschreiben.
Trotzdem vielen Dank an alle die sich die Zeit genommen haben sich mit meinem Problem zu beschäftigen.
Viele Grüße
Frank
--
-- P Bevor Sie diese E-Mail ausdrucken, überlegen Sie bitte, ob dies wirklich erforderlich ist. Please think before you print. -- WIKA Alexander Wiegand SE & Co. KG Alexander-Wiegand-Straße 30 - 63911 Klingenberg - Germany Kommanditgesellschaft: Sitz Klingenberg - Amtsgericht Aschaffenburg HRA 1819 Komplementärin: WIKA Verwaltungs SE & Co. KG - Sitz Klingenberg - Amtsgericht Aschaffenburg HRA 4685 Komplementärin: WIKA International SE - Sitz Klingenberg - Amtsgericht Aschaffenburg HRB 10505 Vorstand: Alexander Wiegand Vorsitzender des Aufsichtsrats: Dr. Max Egli Telefon: (09372) 132-0 Internet: www.wika.com -- The information contained in this E-Mail and any attached files are strictly confidential and may be subject to legal privilege. If you are not the intended recipient, his representative or the person responsible for delivering the message to the intended recipient, be advised that you have received this message in error and that any dissemination, copying or use of this message or attachment is strictly forbidden, as is the disclosure of the information therein. If you have received this E-Mail in error, please notify us immediately by E-Mail or telephone and delete this message and all its attachments subsequently. All reasonable precautions have been taken to ensure no viruses are present in this E-Mail. _______________________________________________ python-de maillist - python-de@python.org https://mail.python.org/mailman/listinfo/python-de

Am 10.09.2013 18:16, schrieb Achim Domma: Hallo zusammen,
daß ein Debugger im Zusammenspiel mit einer GUI Library durchaus mal zu seltsamen Effekten führen kann
als jemand, der viel GUI-Programmierung in verschiedenen Sprachen (insbesondere auch direkt in C) gemacht hat, kann ich das bestätigen. Gerade wenn Du einen graphischen Debugger verwendest, kann dieser einen Effekt auf die Verarbeitung der Nachrichten in der MessageQueue haben. Frank, ich bin mir auch fast sicher, dass Deine Methode update_instruments() aufgerufen wird und der Fehler irgendwo anders zu suchen ist. Eine Methode, die sich bei mir bewährt hat, ist in solchen Situationen "low-tech-Debugging" ;-) zu nutzen. Entweder mit einem Logging-Framework oder durch temporäres Einfügen von print-Anweisungen. Print-Anweisungen kannst Du in eine Datei umleiten, falls Dein Programm ohne Konsole läuft. Wichtig: flush()-Anweisungen verwenden, damit Du auch wirklich jede Ausgabe direkt siehst. Wenn man dies tut, sieht man recht schnell viel klarer, was eigentlich passiert... Viele Grüße Thomas

Hallo, zunächst mal vielen Dank an alle für die entsprechenden Tipps und Ratschläge. Dann werde ich versuchen mit den von Euch genannten Möglichkeiten dem Fehler auf die Spur zu kommen und mich nicht nur auf den eingebauten Debugger verlassen. Mal sehen wie weit ich komme, evtl. muss ich mich nochmal melden, dann hoffentlich präziser. Viele Dank nochmals und viele Grüße Frank PS. Das mit der Signatur hier gefällt mir auch nicht und ich verstehe, dass es Unmut hervorruft. Werde in Zukunft wohl eine andere Email- Adresse verwenden -- Bevor Sie diese E-Mail ausdrucken, überlegen Sie bitte, ob dies wirklich erforderlich ist. Please think before you print. -- WIKA Alexander Wiegand SE & Co. KG Alexander-Wiegand-Straße 30 - 63911 Klingenberg - Germany Kommanditgesellschaft: Sitz Klingenberg - Amtsgericht Aschaffenburg HRA 1819 Komplementärin: WIKA Verwaltungs SE & Co. KG - Sitz Klingenberg - Amtsgericht Aschaffenburg HRA 4685 Komplementärin: WIKA International SE - Sitz Klingenberg - Amtsgericht Aschaffenburg HRB 10505 Vorstand: Alexander Wiegand Vorsitzender des Aufsichtsrats: Dr. Max Egli Telefon: (09372) 132-0 Internet: www.wika.com -- The information contained in this E-Mail and any attached files are strictly confidential and may be subject to legal privilege. If you are not the intended recipient, his representative or the person responsible for delivering the message to the intended recipient, be advised that you have received this message in error and that any dissemination, copying or use of this message or attachment is strictly forbidden, as is the disclosure of the information therein. If you have received this E-Mail in error, please notify us immediately by E-Mail or telephone and delete this message and all its attachments subsequently. All reasonable precautions have been taken to ensure no viruses are present in this E-Mail.

Falls sich das von Dir Achim erwähnte „Doch geht“ darauf bezogen hat, dass es möglich ist in einem wx Event eine eigene Funktion aufzurufen. Hätte ich damit auch leben können und wäre wieder auf die Suche nach meinem Fehler gegangen. Allerdings ist es so, dass ich beim schrittweise debuggen an der Funktion update_instruments() ankomme, will ich nun mit dem nächsten Schritt in die Funktion springen übergibt der Debugger wieder den Focus an mein GUI. Was mich zu der Annahme kommen ließ, dass das event damit beendet wird.
Es ist nicht auszuschliessen, aber ich denke, deine uebereifer beim Exception-Fangen ist im Zweifel da ein staerkerer Grund. Darueber hinaus ist aber (wie auch von anderen schon erwaewaehnt) debugging einer GUI *mit* einer GUI ein Problem. Fuer C++ benutze ich gdb, und fuer Python pdb - Kommandozeile. Kann weniger schiefgehen :)
Ich bin ohnehin der Meinung dass eine Problembeschreibung insofern sinnvoller ist da zu früh geposteter Code den Leser zum einen zu sehr vom Problem ablenkt und den Poster dazu verleitet das Problem nur ungenügend genau zu beschreiben.
Mit Verlaub: nein. Code speaks. Deine Interpretation ist irrelevant. Wenn du/jemand sich etwas zurechterklaert, wie zB "wie ich festgestellt habe ist es offensichtlich nicht möglich im Eventhandler weitere Funktionen aufzurufen?" ist das moeglicherweise eine komplett falsche Interpretation von was auch immer bei dir akut passiert. Wir haben bereits beschrieben, was da problematisch sein koennte: gefangene Exceptions, (GUI)-Debugger. Definitiv *nicht* auf der Liste: man kann keine Funktionen in Event-Handlern aufrufen. Es war darum durchaus sehr richtig von dir, den Code zu posten. Aber eben mit mehr Beschreibung, was wo wie nicht klappt. Exception-Stack-Traces, Stellen im Code, wo du was anderes erwartest. Und noch ein kurzer Nachtrag zum Footer: du magst das nicht unmittelbar beeinflussen koennen, und es ist mir auch bezueglich deiner Fragen hier wurscht. Aber (und da kam Dinu denke ich her) - er ist absurd gigantisch, inklusive einem Bild, unwirksamer Vertraulichkeitserklaerungen und Marketinghinweisen. Das hat in Email nichts zu suchen, vielleicht kannst du deinen Kollegen aus dem Marketing den Hinweis geben :) LG Diez

Am Tue, 10 Sep 2013 16:03:26 +0000 schrieb "Wagner, Frank" <Frank.Wagner@wika.com>:
Genau solche Kritik wie sie Diez bezüglich des try und except angebracht hat finde ich vollkommen in Ordnung.
Ohne try/Except bekommst du z.B. vermutlich eine Fehlermeldung, weil du update_intruments() ohne self aufrufst.
Ich bin ohnehin der Meinung dass eine Problembeschreibung insofern sinnvoller ist da zu früh geposteter Code den Leser zum einen zu sehr vom Problem ablenkt und den Poster dazu verleitet das Problem nur ungenügend genau zu beschreiben.
Es ist häufig sinnvoll, statt des tatsächlichen Codes ein Minimalbeispiel zu posten, das den gleichen Fehler erzeugt. Oft findet man dabei auch selbst den Fehler. -- Privacy Indicator Unity appindicator to switch privacy settings <http://www.florian-diesch.de/software/indicator-privacy/>

Hallo, ja das war genau das Problem, allerdings gab es keine Fehlermeldung wie z. B, " Method foo() is not defined" was mich nicht sofort auf das fehlende self hat stoßen lassen. Viele Grüße Frank -- Bevor Sie diese E-Mail ausdrucken, überlegen Sie bitte, ob dies wirklich erforderlich ist. Please think before you print. -- WIKA Alexander Wiegand SE & Co. KG Alexander-Wiegand-Straße 30 - 63911 Klingenberg - Germany Kommanditgesellschaft: Sitz Klingenberg - Amtsgericht Aschaffenburg HRA 1819 Komplementärin: WIKA Verwaltungs SE & Co. KG - Sitz Klingenberg - Amtsgericht Aschaffenburg HRA 4685 Komplementärin: WIKA International SE - Sitz Klingenberg - Amtsgericht Aschaffenburg HRB 10505 Vorstand: Alexander Wiegand Vorsitzender des Aufsichtsrats: Dr. Max Egli Telefon: (09372) 132-0 Internet: www.wika.com -- The information contained in this E-Mail and any attached files are strictly confidential and may be subject to legal privilege. If you are not the intended recipient, his representative or the person responsible for delivering the message to the intended recipient, be advised that you have received this message in error and that any dissemination, copying or use of this message or attachment is strictly forbidden, as is the disclosure of the information therein. If you have received this E-Mail in error, please notify us immediately by E-Mail or telephone and delete this message and all its attachments subsequently. All reasonable precautions have been taken to ensure no viruses are present in this E-Mail.

On Sep 13, 2013, at 9:49 AM, Wagner, Frank wrote:
Hallo,
ja das war genau das Problem, allerdings gab es keine Fehlermeldung wie z. B, " Method foo() is not defined" was mich nicht sofort auf das fehlende self hat stoßen lassen.
Natuerlich gab es die. Du hast sie nur mit try: … except: # ALLES ABFANGEN … unterdrueckt. Das versuchen wir dir jetzt seit grob einer Woche zu sagen :) Diez

Hallo Diez, Natuerlich gab es die. Du hast sie nur mit try: . except: # ALLES ABFANGEN . unterdrueckt. Das versuchen wir dir jetzt seit grob einer Woche zu sagen :) NEIN, es gab keine Ich weiß was try und except macht und dass ich damit Fehlermeldungen unterdrücke. Also hab ich try und except entfernt, übrigens testweise schon vor meinem ersten Post hier und auch hier gab es keine Fehlermeldung, was mich überhaupt erst veranlasst hat hier einen Post zu schreiben. Auf Grund der Ratschläge hier hab ich das try.. except Konstrukt nur um die eine Anweisung gelegt die ich primär abfangen wollte, auch jetzt gab es keine Fehlermeldung durch meinen Funktionsaufruf mit fehlendem self. Per Zufall stach mir der Funktionsaufruf ohne das self. ins Auge, habs geändert und es funktionierte. Grüße und vielen Dank für die Hinweise Frank -- Bevor Sie diese E-Mail ausdrucken, überlegen Sie bitte, ob dies wirklich erforderlich ist. Please think before you print. -- WIKA Alexander Wiegand SE & Co. KG Alexander-Wiegand-Straße 30 - 63911 Klingenberg - Germany Kommanditgesellschaft: Sitz Klingenberg - Amtsgericht Aschaffenburg HRA 1819 Komplementärin: WIKA Verwaltungs SE & Co. KG - Sitz Klingenberg - Amtsgericht Aschaffenburg HRA 4685 Komplementärin: WIKA International SE - Sitz Klingenberg - Amtsgericht Aschaffenburg HRB 10505 Vorstand: Alexander Wiegand Vorsitzender des Aufsichtsrats: Dr. Max Egli Telefon: (09372) 132-0 Internet: www.wika.com -- The information contained in this E-Mail and any attached files are strictly confidential and may be subject to legal privilege. If you are not the intended recipient, his representative or the person responsible for delivering the message to the intended recipient, be advised that you have received this message in error and that any dissemination, copying or use of this message or attachment is strictly forbidden, as is the disclosure of the information therein. If you have received this E-Mail in error, please notify us immediately by E-Mail or telephone and delete this message and all its attachments subsequently. All reasonable precautions have been taken to ensure no viruses are present in this E-Mail.

NEIN, es gab keine
Ich weiß was try und except macht und dass ich damit Fehlermeldungen unterdrücke.
Also hab ich try und except entfernt, übrigens testweise schon vor meinem ersten Post hier und auch hier gab es keine Fehlermeldung, was mich überhaupt erst veranlasst hat hier einen Post zu schreiben. Auf Grund der Ratschläge hier hab ich das try.. except Konstrukt nur um die eine Anweisung gelegt die ich primär abfangen wollte, auch jetzt gab es keine Fehlermeldung durch meinen Funktionsaufruf mit fehlendem self. Per Zufall stach mir der Funktionsaufruf ohne das self. ins Auge, habs geändert und es funktionierte.
Da habe ich starke Zweifel. Unmoeglich ist nix, aber unwahrscheinlich vieles. Wenn dem tatsaechlich so war, dann vermute ich sehr stark einen Seiteneffekt durch die Art, wie du entwickelst. GUI-Entwicklung innerhalb einer GUI-Anwendung kann trickreich sein, und ich wuerde dir empfehlen mindestens fuer solch einen Fall auch ueber die Kommandozeile zu arbeiten. Da sollte das Programm dann abbrechen, und auch einen vernuenftigen Stacktrace liefern. Diez

Am 13.09.2013 11:12, schrieb Diez B. Roggisch:
nur um die eine Anweisung gelegt die ich primär abfangen wollte, auch jetzt gab es keine Fehlermeldung durch meinen Funktionsaufruf
mit fehlendem self. Per Zufall stach mir der Funktionsaufruf ohne das self. ins Auge, habs geändert und es funktionierte. Da habe ich starke Zweifel. [...]
Ich fände es interessant die tatsächliche Ursache für das Problem zu kennen. Ein Testbeispiel (ohne WX-Python) führt dazu, dass der Interpreter meldet, dass er den Namen nicht im globalen Namensraum finden kann. Vermutung 1: Hattest Du ggf. einen Fehler in der Einrückung? (update_instruments() gehörte gar nicht zur Klasse...) Vermutung 2: Ist der Name update_instruments bei Dir zufällig noch im globalen Namensraum ein zweites Mal definiert?
class Klasse: ... def methode(self, bla): ... print(bla) ... def methode2(self, blu): ... methode(blu) ... k=Klasse() k.methode("Hallo") Hallo k.methode2("Holla") Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 5, in methode2 NameError: global name 'methode' is not defined
Viele Grüße Thomas

Hallo Ich fände es interessant die tatsächliche Ursache für das Problem zu kennen. Ein Testbeispiel (ohne WX-Python) führt dazu, dass der Interpreter meldet, dass er den Namen nicht im globalen Namensraum finden kann. Das würde mich auch interessieren, gerade deshalb da ich bei dieser Art Fehler mit einer solchen Fehlermeldung gerechnet hätte. Vermutung 1: Hattest Du ggf. einen Fehler in der Einrückung? (update_instruments() gehörte gar nicht zur Klasse...) Vermutung 2: Ist der Name update_instruments bei Dir zufällig noch im globalen Namensraum ein zweites Mal definiert? Habs nochmal überprüft aber beide Vermutungen treffen nicht zu. Ich denke die Vermutung die Diez geäußert hat könnte hier bei mir zutreffen, so dass die IDE und das GUI sich irgendwie ungünstig beeinflussen und so irgendwie die Fehlermeldung abhanden kommt. Ich werde es demnächst vermutlich mal über die Kommandozeile probieren und sehen ob ich da eine aufschlussreichere Fehlermeldung präsentiert bekomme. Bis dahin schon mal vielen Dank Gruß Frank -- Bevor Sie diese E-Mail ausdrucken, überlegen Sie bitte, ob dies wirklich erforderlich ist. Please think before you print. -- WIKA Alexander Wiegand SE & Co. KG Alexander-Wiegand-Straße 30 - 63911 Klingenberg - Germany Kommanditgesellschaft: Sitz Klingenberg - Amtsgericht Aschaffenburg HRA 1819 Komplementärin: WIKA Verwaltungs SE & Co. KG - Sitz Klingenberg - Amtsgericht Aschaffenburg HRA 4685 Komplementärin: WIKA International SE - Sitz Klingenberg - Amtsgericht Aschaffenburg HRB 10505 Vorstand: Alexander Wiegand Vorsitzender des Aufsichtsrats: Dr. Max Egli Telefon: (09372) 132-0 Internet: www.wika.com -- The information contained in this E-Mail and any attached files are strictly confidential and may be subject to legal privilege. If you are not the intended recipient, his representative or the person responsible for delivering the message to the intended recipient, be advised that you have received this message in error and that any dissemination, copying or use of this message or attachment is strictly forbidden, as is the disclosure of the information therein. If you have received this E-Mail in error, please notify us immediately by E-Mail or telephone and delete this message and all its attachments subsequently. All reasonable precautions have been taken to ensure no viruses are present in this E-Mail.

On Tue, 10 Sep 2013 14:13:02 +0000 "Wagner, Frank" <Frank.Wagner@wika.com> wrote:
Im Übrigen gibt es in dem Eventhandler nur einen selbst definierten Funktionsaufruf nämlich update_instruments().
Naja, du sagst ja nicht *was* der Eventhandler ist. Man kann vielleicht inferieren dass OnSelDevice das ist, aber Eventhandler können prinzipiell beliebig heißen. Und Funktionsaufrufe hast du da genügend drin (Ein Konstruktor ist ja auch ein Funktionsaufruf von ner entsprechenden __init__): - GPIB_Bus() - SelDeviceDialog() - ShowModal() - split() - append() - update_instruments() - Enable() - wx.MessageDialog() - Destroy() Damit ist deine Theorie sehr leicht wiederlegt. Python macht keine Unterscheidung zwischen selbstdefinierten Funktionen und eingebauten, zudem noch für Python dann die wx-Funktionen ebenfalls selbstdefiniert sind, weil es natürlich nicht zum Python-Interpreter zählen. Also liegt dein Problem wo anders. Du kannst mal das except rausnehmen, dann siehst du was da für eine Exception eventuell fliegt. grüße, Marek

Wagner, Frank wrote:
ich habe folgendes Problem, welches vielleicht mehr am event- System des GUI- Toolkits liegt als an Python. Ich benutze wxPython für meine Anwendung und wie ich festgestellt habe ist es offensichtlich nicht möglich im Eventhandler weitere Funktionen aufzurufen? Wie würde man das Problem am sinnvollsten lösen?
Ohne nähere Kenntnis von wx -- meist löst man im Eventhandler einen (Custom-)Event aus, dessen Eventhandler wiederum die "weitere Funktion" ist.

Hallo,
Ohne nähere Kenntnis von wx -- meist löst man im Eventhandler einen (Custom-)Event aus, dessen Eventhandler wiederum die "weitere Funktion" ist.
Vielen Dank für den Tipp das werd ich gleich mal ausprobieren. Gruß Frank -- Bevor Sie diese E-Mail ausdrucken, überlegen Sie bitte, ob dies wirklich erforderlich ist. Please think before you print. -- WIKA Alexander Wiegand SE & Co. KG Alexander-Wiegand-Straße 30 - 63911 Klingenberg - Germany Kommanditgesellschaft: Sitz Klingenberg - Amtsgericht Aschaffenburg HRA 1819 Komplementärin: WIKA Verwaltungs SE & Co. KG - Sitz Klingenberg - Amtsgericht Aschaffenburg HRA 4685 Komplementärin: WIKA International SE - Sitz Klingenberg - Amtsgericht Aschaffenburg HRB 10505 Vorstand: Alexander Wiegand Vorsitzender des Aufsichtsrats: Dr. Max Egli Telefon: (09372) 132-0 Internet: www.wika.com -- The information contained in this E-Mail and any attached files are strictly confidential and may be subject to legal privilege. If you are not the intended recipient, his representative or the person responsible for delivering the message to the intended recipient, be advised that you have received this message in error and that any dissemination, copying or use of this message or attachment is strictly forbidden, as is the disclosure of the information therein. If you have received this E-Mail in error, please notify us immediately by E-Mail or telephone and delete this message and all its attachments subsequently. All reasonable precautions have been taken to ensure no viruses are present in this E-Mail.
participants (9)
-
Achim Domma
-
Diez B. Roggisch
-
Diez Roggisch
-
Dinu Gherman
-
Florian Diesch
-
Marek Kubica
-
Peter Otten
-
Thomas Lenarz
-
Wagner, Frank