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.
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.
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?
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.
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.
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. :-)
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" ;)
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.
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).
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.
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]
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.
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.
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:
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?
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.
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.
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.
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.
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.
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.
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.