Moin, ich habe hier ein interessantes Phänomen, das ich mir nicht erklären kann: Ich will Einträge von einer Quelllistbox in eine Ziellistbox übertragen, indem ich den gewünschten Eintrag doppelt anklicke oder per Drag-n-Drop verschiebe - das soll gleichzeitig möglich sein. Das funktioniert auch wunderbar in einem Test-Script. Wenn ich die Funktionen nun in eine Klasse übertrage, und in einem Notebook-Tab verwende, wird nur das Einzel-Click-Event ausgeführt. Wenn ich dessen Bind auskommentiere, funktioniert der Doppelklick. Woran könnte das liegen? Vielen Dank schon mal! Rahul
:
Bearbeitet durch User
Ich fürchte, bei der aktuellen Informationslage wirst du nur solche generischen Antworten bekommen wie: „Zeile 42 ist sicher falsch, auch ohne den Quelltext zu kennen.“ Um dir wirklich helfen zu können, solltest du uns ein paar weitere Parameter mitteilen. Schön wäre zum Beispiel zu wissen, unter welchem Betriebssystem du das Phänomen beobachtest. Außerdem kann es hilfreich sein, deinen Sourcecode so weit zu reduzieren, bis das Problem nicht mehr auftritt. Ich empfehle dir, dein Projekt zu sichern und nach und nach alle Teile zu entfernen, die nichts mit dem Fenster zu tun haben, bis du ein kleines Programm hast, das dein Problem demonstrieren kann. Dieses Programm kannst du dann hier posten, so haben wir eine grobe Vorstellung davon, was du versuchst und können gezielter helfen. Zudem kannst du überlegen, ob ein generisches Mikrocontroller-Forum wirklich die beste Anlaufstelle für Python-Probleme ist. Vielleicht ist deine Frage im python-forum.de besser aufgehoben. Allerdings möchte man auch dort von dir ein minimal lauffähiges Programm sehen, das dein Problem demonstriert.
Rahul D. schrieb: > Wenn ich die Funktionen nun in eine Klasse übertrage, und in einem > Notebook-Tab verwende, wird nur das Einzel-Click-Event ausgeführt. > Wenn ich dessen Bind auskommentiere, funktioniert der Doppelklick. Mitunter hilft es, den Eventhandler mit after() aufzurufen. Vielleicht kannst Du ein minimales Beispiel einstellen, das Dein Problem zeigt?
Oliver schrieb: > Zudem kannst du überlegen, ob ein generisches Mikrocontroller-Forum > wirklich die beste Anlaufstelle für Python-Probleme ist. Vielleicht ist > deine Frage im python-forum.de besser aufgehoben. Meine Wahrnehmung ist, daß man hier schon ziemlich gute Hilfe für Probleme unter Python finden kann, mitunter hoffentlich sogar von mir. Von dem Forum, das Du empfiehlst, kann ich im Übrigen nur abraten.
Ein T. schrieb: > Vielleicht > kannst Du ein minimales Beispiel einstellen, das Dein Problem zeigt? Schwierig / aufwendig, da da derzeit noch ein ganzer (notwendiger) Rattenschwanz dran hängt.
Ein T. schrieb: > Vielleicht > kannst Du ein minimales Beispiel einstellen, das Dein Problem zeigt? Im Anhang. Es wird auch beim Doppelclick immer der Eventhandler der linken Maustaste ausgeführt. > Mitunter hilft es, den Eventhandler mit after() aufzurufen. Wie meinst du das? Bzw. wie macht man das? ("after()" selbst ist mir ein Begriff). Ich habe zwar Ahnung vom Programmieren semikolon- und klammerbehafteter Programmiersprachen, aber an python muss ich mich erst mal gewöhnen - bloß nicht die IDE / den Editor beim Entwickeln -wechseln... ;)) Das ist mein erstes umfangreicheres python-Projekt (mit viel GUI) seit langem. Oliver schrieb: > Schön wäre zum Beispiel zu wissen, unter welchem > Betriebssystem du das Phänomen beobachtest. Windows 10
Rahul D. schrieb: > Ein T. schrieb: >> Mitunter hilft es, den Eventhandler mit after() aufzurufen. > Wie meinst du das? Bzw. wie macht man das? ("after()" selbst ist mir ein > Begriff). Versuch' bitte mal anstelle von Zeile 16 und 17 das Folgende:
1 | self._makroListbox.bind("<Double-Button-1>",
|
2 | self.after(100, self._onDoubleClick)) |
3 | self._makroListbox.bind("<Button-1>",
|
4 | self.after(100, self._onLeftClick)) |
Der Aufruf von .after() steckt die auszuführende Funktion / Methode in die Eventloop, anstatt sie direkt auszuführen. Ist zumindest einen Versuch wert... :-) Tkinter funktioniert sehr gut, aber erstens würde ich heute eher auf Tix (oder eine andere alternative Variante) setzen, schon wegen der moderneren Optik, und zweitens sind Tkinter, Tix & Konsorten mitunter ein bisschen... sagen wir, eigenwillig. :-) > Das ist mein erstes umfangreicheres python-Projekt (mit viel GUI) seit > langem. Tjaaa... mittlerweile mache ich nur noch ganz selten Python-Skripte mit GUI, sondern setze ich -- auch lokal -- eher auf Webtechnologien. :-)
Ein T. schrieb: > Tjaaa... mittlerweile mache ich nur noch ganz selten Python-Skripte mit > GUI, sondern setze ich -- auch lokal -- eher auf Webtechnologien. :-) Es gibt bei uns leider Mitarbeiter (Werk-Studenten / Praktikanten etc), die python toll finden. Und wenn die die Firma verlassen, darf sich irgendwer um die Fortführunge derer "Projekte" kümmern. Dokumentation wird natürlich auch überbewertet. "Das crazy" ;) Ein T. schrieb: > Versuch' bitte mal anstelle von Zeile 16 und 17 das Folgende: > self._makroListbox.bind("<Double-Button-1>", > self.after(100, self._onDoubleClick)) > self._makroListbox.bind("<Button-1>", > self.after(100, self._onLeftClick)) > > Der Aufruf von .after() steckt die auszuführende Funktion / Methode in > die Eventloop, anstatt sie direkt auszuführen. Probier ich mal.
:
Bearbeitet durch User
Rahul D. schrieb: > Die Zeilen bewirken leider nur Fehlermeldungen: > "TypeError: _onLeftClick() missing 1 required positional argument: > 'event'" OK, den habe ich selber behoben. Der Links-Klick-Eventhandler wird jetzt aber nur ein einziges Mal ausgeführt.
:
Bearbeitet durch User
Rahul D. schrieb: > Es gibt bei uns leider Mitarbeiter (Werk-Studenten / Praktikanten etc), > die python toll finden Ein T. schrieb: > Tjaaa... mittlerweile mache ich nur noch ganz selten Python-Skripte mit > GUI, sondern setze ich -- auch lokal -- eher auf Webtechnologien. :-) Geht ja beides. Für das Backend Python und für das Frontend HTML/JS/... im Browser. Schau dir Mal Django/Flask/FastAPI an. Nutze ich auch wenn ich mit Python eine Oberfläche brauche.
N. M. schrieb: > Schau dir Mal Django/Flask/FastAPI an. Nutze ich auch wenn ich mit > Python eine Oberfläche brauche. Es geht nur um zwei Eventhandler, die sich gegenseitig "behindern". Die GUI ist soweit fertig (und sieht halt etwas steril aus, was aber niemanden stört; Klicki-Bunti lenkt nur ab). Beim nächsten Mal baue ich das auf C# und Avalonia um. Das ist hier Standard (und wird von mehreren Kollegen unterstützt).
:
Bearbeitet durch User
Rahul D. schrieb: > Es gibt bei uns leider Mitarbeiter (Werk-Studenten / Praktikanten etc), > die python toll finden. Das liegt sicherlich daran, daß Python so toll ist. :-) > Und wenn die die Firma verlassen, darf sich irgendwer um die > Fortführunge derer "Projekte" kümmern. > Dokumentation wird natürlich auch überbewertet. "Das crazy" ;) Dieses Problem entsteht ja immer, wenn in einem Unternehmen etwas Neues eingeführt wird. Deswegen brauchen Unternehmen immer auch Strategien, damit umzugehen, oder sie bekommen Probleme. Oder sie führen nie wieder was Neues ein, aber auch das führt ja früher oder später zu Problemen.
Ein T. schrieb: > Das liegt sicherlich daran, daß Python so toll ist. :-) Interpretersprachen sind toll? LOL YMMD...
Rahul D. schrieb: > Ein T. schrieb: >> Das liegt sicherlich daran, daß Python so toll ist. :-) > > Interpretersprachen sind toll? LOL YMMD... Oha, da spricht ein echter "Fachmann". ;-)
[OffTopic] Ein T. schrieb: > Oha, da spricht ein echter "Fachmann". ;-) Wo ist das / dein Problem? Um ein python-Script ohne IDE laufen zu lassen, braucht man den Interpreter, der das script übersetzt (wenn auch einmalig). Will man es auf einer anderen Maschine verwenden, muss man das ganze Geraffel bzgl. Libs etc. mitschleppen oder nachträglich installieren. Ja, dass man eine Exe mit pyInstaller erstellen kann, ist mir klar. Das erledigen andere IDE und Programmiersprachen aber schon so. [/OffTopic]
Rahul D. schrieb: > [OffTopic] > Ein T. schrieb: >> Oha, da spricht ein echter "Fachmann". ;-) > > Wo ist das / dein Problem? Daß Du ein Dummschwätzer bist. > Um ein python-Script ohne IDE laufen zu lassen, braucht man den > Interpreter, der das script übersetzt (wenn auch einmalig). Um es mit IDE laufen zu lassen, braucht man sogar die IDE. Wow. > Will man es auf einer anderen Maschine verwenden, muss man das ganze > Geraffel bzgl. Libs etc. mitschleppen oder nachträglich installieren. > Ja, dass man eine Exe mit pyInstaller erstellen kann, ist mir klar. > Das erledigen andere IDE und Programmiersprachen aber schon so. Die müssen dafür allerdings eine Libc, eine Libstd++ -- und beide bitte auch in halbwegs kompatiblen Versionen --, und allerlei anderes Zeugs haben. Dein "Argument" ist also, wie schon früher erkannt, nichts als Dummschwätzerei.
Ein T. schrieb: > Dein "Argument" ist also, wie schon früher erkannt, nichts als > Dummschwätzerei. Oh! Habe ich jetzt die Ehre eines python-Jüngers mit meiner auf Erfahrung basierenden Meinung verletzt? Tut mir leid. Du kannst bestimmt dein "Argument" "Dummschwätzerei" präzisieren, oder? Danke, für deine Hilfe. Die war leider nicht zielführend.
Rahul D. schrieb: > Ein T. schrieb: >> Dein "Argument" ist also, wie schon früher erkannt, nichts als >> Dummschwätzerei. > > Oh! Habe ich jetzt die Ehre eines python-Jüngers mit meiner auf > Erfahrung basierenden Meinung verletzt? Nein. Schließlich beherrsche ich nicht nur Python, sondern auch C, C++, Golang, Bash und noch ein paar andere Werkzeuge. > Tut mir leid. > Du kannst bestimmt dein "Argument" "Dummschwätzerei" präzisieren, oder? Der große Unterschied zwischen Profi und Dummschwätzer ist: ich benutze für meine Aufgaben das jeweils passende Werkzeug und habe, um stets ein passendes zur Hand zu haben, deren mehrere im Portfolio. Aber der allergrößte Dummschwatz ist IMHO Deine Schlußfolgerung: Rahul D. schrieb: > Beim nächsten Mal baue ich das auf C# und Avalonia um. Dieses c# benötigt doch eine Laufzeitumgebung, die mehrere Gigabyte groß sein und zudem eine starke Abhängigkeit von einer bestimmten Betriebssystemfamilie haben soll. Und Du beschwerst Dich über einen Python-Interpreter, der winzig klein, auf der besagten Betriebssystemfamilie ratzfatz installiert, und dazu auch für die Entwicklung plattformunabhängiger Software geeignet ist?
Ein T. schrieb: > Dieses c# benötigt doch eine Laufzeitumgebung, die mehrere Gigabyte groß > sein und zudem eine starke Abhängigkeit von einer bestimmten > Betriebssystemfamilie haben soll. Und Du beschwerst Dich über einen > Python-Interpreter, der winzig klein, auf der besagten > Betriebssystemfamilie ratzfatz installiert, Ich nehme meine C#-Exe und lass sie einfach auf einem Windows-System laufen. > und dazu auch für die > Entwicklung plattformunabhängiger Software geeignet ist? Die Portabilität ist spätestens dann zuende, wenn man Funktionen benutzt, für die es keine Unterstützung unter dem Betriebssystem gibt (hatte ich gerade bei der python-Geschichte, weswegen ich "import platform" benutzen durte. Ein T. schrieb: > Nein. Schließlich beherrsche ich nicht nur Python, sondern auch C, C++, > Golang, Bash und noch ein paar andere Werkzeuge. Wichtigtuerei nicht vergessen! Auf deine "Hilfe" kann ich echt verzichten. Die kann man auch gleich verreiben. Tipp meinerseits: Sollte ich (den Ersteller sieht man ja in der Übersicht) noch mal einen Thread zum Thema python o. dergl. eröffnen, einfach überlesen und gar nicht erst darüber nachdenken, deine Hilfe anzubieten. Danke, dass der Thread aufgrund deines Egos jetzt endgültig OT ist. Schönes Restleben.
:
Bearbeitet durch User
Rahul D. schrieb: > Das funktioniert auch wunderbar in einem Test-Script. > Wenn ich die Funktionen nun in eine Klasse übertrage, und in einem > Notebook-Tab verwende, wird nur das Einzel-Click-Event ausgeführt. > Wenn ich dessen Bind auskommentiere, funktioniert der Doppelklick. wie wäre es, wenn du den Code posten würdest?
Jens K. schrieb: > wie wäre es, wenn du den Code posten würdest? Nö. Das Thema ist für mich erledigt (mir ist einfach die Lust vergangen - vielleicht melde ich mich noch mal). Die Doppel-Funktion war eh nur ein nettes Nice-To-Have.
Rahul D. schrieb: > Windows- Sic! > Tipp meinerseits: Sollte ich (den Ersteller sieht man ja in der > Übersicht) noch mal einen Thread zum Thema python o. dergl. eröffnen, > einfach überlesen und gar nicht erst darüber nachdenken, deine Hilfe > anzubieten. War bereits um 10:58 entschieden, sei unbesorgt. > Danke, dass der Thread aufgrund deines Egos jetzt endgültig OT ist. Wessen Ego? Beitrag "Re: Click-Callbacks in python / tkinter" > Schönes Restleben. Danke, Dir auch.
Ein T. schrieb: > Wessen Ego? Deins. Akzeptier doch einfach, dass es Menschen gibt, die machen Sachen nicht mögen, aber trotzdem damit arbeiten (müssen). Ein T. schrieb: > War bereits um 10:58 entschieden, sei unbesorgt. Sieht nicht danach aus. Dein letzter Beitrag vor 11:00 Uhr war um 10:59 - da hättest du ja auch einfach meinen Tipp vorhersehen können. Eigentlich hätte ich gedacht, dass du mir schon nach unserer letzten "Begegnung" aus dem Weg gehen würdest. Hab ich mich getäuscht. Was erwratest du eigentlich, wenn die jemanden als ""Fachmann"" (doppelte Anführungszeichen als Zitat-Markierung) oder "Dummschwätzer" bezeichnest? Dass man sich darüber freut? Wenn du der Meinung bist, dass python toll ist, dann akzeptiere ich das. Ich muss es weder mögen, noch dir zustimmen.
:
Bearbeitet durch User
Rahul D. schrieb: > Es wird auch beim Doppelclick immer der Eventhandler der linken > Maustaste ausgeführt. So steht es auch im feinen Manuel [1]. Kann man natürlich verhindern. [1] https://dafarry.github.io/tkinterbook/tkinter-events-and-bindings.htm
Sheeva P. schrieb: > So steht es auch im feinen Manuel Danke, aber ich wollte Manuel nicht unbedingt sezieren ;) (Nice typo) Mir fehlte wohl der passende Suchbegriff.
Sheeva P. schrieb: > Kann man natürlich verhindern. Nur wie? Das war ja auch die ursprüngliche Frage.
Rahul D. schrieb: > Sheeva P. schrieb: >> Kann man natürlich verhindern. > Nur wie? Das war ja auch die ursprüngliche Frage. Ich antworte mir mal selber, da ich das Problem selber beheben konnte: Bei einem Doppelklick wird das Einzelklick-Event und das Release-Event ausgelöst.1 Wenn das Release-Event in der Quelllistbox auftritt, wird es quasi ignoriert (die Kopieraktion wird nur durchgeführt, wenn sich der Mauszeiger in der Ziellistbox befindet). Das Doppelklick-Event ist noch in der Event-Queue und wird (anschließen) abgearbeitet. Ob das Problem jetzt nur bei python / tkinter auftritt, dürfte ziemlich irrelevant sein. Danke für hilfreiche Beiträge.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.