Path: csiph.com!fu-berlin.de!uni-berlin.de!not-for-mail From: Hans-Peter Jansen Newsgroups: de.comp.lang.python Subject: =?utf-8?q?=5BPython-de=5D_Re=3A_New_overriden_and_generated_QLineEdit_class_will?= Date: Sat, 09 Oct 2021 15:10:57 +0200 Lines: 160 Message-ID: <2489059.7TxBIyBedf@xrated> References: <22626993-ba87-4fb8-8a7d-b8c022a3e30en@googlegroups.com> <2024386.nlPfB5tcfk@xrated> <61d705ff-d5cc-4b08-bd26-af0af09a8a64n@googlegroups.com> Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Trace: news.uni-berlin.de /R8qUrBqrZhRQkpYENovigYorQeI3t0eV7lhOEmO6eLg== Authentication-Results: mail.python.org; dkim=none reason="no signature"; dkim-adsp=none (unprotected policy); dkim-atps=neutral X-Virus-Scanned: amavisd at 'smile.earth' In-Reply-To: <61d705ff-d5cc-4b08-bd26-af0af09a8a64n@googlegroups.com> X-Provags-ID: V03:K1://dxZC2fBKZlwaskXIQrjiZ9d7JGjHDQz4AuIUd0k2oBcZ0MCOo gF6J2Dg71QIJz7oP7+FDYoWEDnYlJfHdHhaWM9c1Sy4+qK4JCMahP99uGzYnzDCbSmLLGFQ seC/w5T1TiiPLVhfqcvqt0HkGc4Ke5eYN8hsAgkqDSCQkJh+Rt88UkV365wWmO9qwUEuGBV OpqiXnR93yKcI6zVoHPJQ== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1;V03:K0:6x/ZTXWJxHE=:xpkGdFMbZ89r58xzzc3UEs xKCmIsrtTQB2rPqohb81jM4QMttLcmUlQ8IuvNh5hZnntAIm1asqI3XPIwIGG0m3v9+ed3IqF /TqaShx8DZO6mVYBMOTpHtP5oR9XfgfhYb3AxKKt6FOtGJ3K2D1bfYFTEGP3t8cB69UImFKjc 5zslCMktOOFJ5lR9T5TWWKwuJ7nO1DfuY68Av/7xg0Fza3NwZ3/yXsfSK7pG25mNwOoR0HLue tSpSnS1OUSSOxxanp1huhBKcWJfNzh2RISERrmrAkLWZP70MdwtYkShCTxwk3nvb/zk99jc64 yBpKlLF79lUXxCaeGkx37cqR7yM7vWQfI7LmeCsp2FoGR9Rxgk2cUSva4rf/EMBT0E5u9Y5KX pqUkrtesRXLfTCnEHHP+Lic0s4fEkgM7aoEM4SAtg0G10lEjPUhgR1HbtNwMeOzq0r78a0GTt TBtgCBISraF/NO4GYCXmGKtp1inupeD0YyygVprJmHQL2aHJzsiUfoVH7/tJ4ghOTx3ibJjXM ySGPVKhzbJy7KSw9EHLmmUWzDLdakt7U+MFJKYOt9mGcT6mBOLCS6iIH26nXukeG0uW5oAajT 6erpXTrFwEkycGvtcPiWLimsmZexP892lObLTUfg+KPlokQI4MzJA9BlpPEK/x6ANzC9L6kKN fvV3iBXni0/AEtvYAM+sowB7407Gpps09+jAmQXKYsQiQ9Hhh0q7TVsGMWRT0KzM0YDPMSCZB GZ94iSnXlww5RoZy3HCIVhJqXNq6Th4BRoCg6Z1VxhocFHsHfTOa6ES6SMgkZ1DMJ0ioErJLu A5yIgMD Message-ID-Hash: CVUASBMC3MLCGZMBYZA242Y63PKHLANU X-Message-ID-Hash: CVUASBMC3MLCGZMBYZA242Y63PKHLANU X-MailFrom: hpj@urpla.net X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-python-de.python.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.5 Precedence: list List-Id: Die Deutsche Python Mailingliste Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Xref: csiph.com de.comp.lang.python:5746 Hallo Mohsen, okay, auf ein Neues. Zuvor ein kurzer Hinweis: ich vermute, Du hast noch ni= cht=20 so viel Erfahrung im Umgang mit Email in solchen Foren, und ich m=C3=B6chte= Dir=20 auch nicht vor den Kopf sto=C3=9Fen, aber im Prinzip tust Du es aber mit De= inen=20 Lesern.. Ohne jetzt gro=C3=9F und breit die Netiquette zu erkl=C3=A4ren, hi= er ein=20 Auszug: Zitieren durch Einr=C3=BCcken (mit "> " vor jeder Zeile =E2=80=93 u= nd ohne=20 Ver=C3=A4nderung des Wortlautes) und Weglassen =C3=BCberfl=C3=BCssiger Info= rmationen (Nicht=20 immer alles zitieren!) Am Samstag, 9. Oktober 2021, 06:10:02 CEST schrieb Mohsen Owzar: >=20 > Danke Hans-Peter f=C3=BCr Deine Antwort. > Ich wurde auch von Lars benachrichtigt, dass ich auf der falschen Seite > (Deutsch) meine Frage in Englisch gestellt habe. Damit ich nicht noch eine > Frage aufmache, werde ich unten meine Frage noch einmal auf Deutsch > stellen. > Aber zuerst zu Deinen Fragen: > > Vielleicht solltest Du erst mal versuchen, dein Problem m=C3=B6glichst = kurz zu > > formulieren. Ich kann hier nur eine Ablaufbeschreibung finden. >=20 > Ich dachte, dass ich das getan h=C3=A4tte und dass ich zu viel geschriebe= n habe. > OK, wenn es so ist, ist nachfolgend eine kurze Beschreibung meines > Problems: Ich muss eine GUI f=C3=BCr eine Relais-Test-Ablauf-Steuerung > schreiben, die in der Lage ist, durchs Bet=C3=A4tigen einiger =C2=ABButto= ns=C2=BB die > Kontakte zu schliessen oder zu =C3=B6ffnen. Man kann die Wartezeit f=C3= =BCr die > Schliess- / =C3=96ffnen-Zeit individuell f=C3=BCr jeden Test einstellen. = Daf=C3=BCr gibt > es einen Button auf der Haupt-GUI (Settings), mit dessen Hilfe man auf das > Settings-Fenster gelangt. Auf diesem Fenster befinden sich mehrere > QLineEdit-Felder, die unter anderem f=C3=BCr die einigen Zeit-Einstellung= en > zust=C3=A4ndig sind. >=20 > Jetzt kommt mein Problem und Anliegen: > Da am Ende, dieses Programms auf einem Raspberry Pi unter Linux laufen so= ll > und nur ein Tablet mit Touchscreen und kein Keyboard vorhanden ist, habe > ich um jedes Edit-Feld einen Button =C2=ABPlus=C2=BB oder =C2=ABMinus=C2= =BB hinzugef=C3=BCgt, die > den angezeigten Wert im Feld erh=C3=B6hen oder erniedrigen. Wenn aber der > gew=C3=BCnschte Wert sehr weit vom angezeigten Wert liegt, muss man mehre= re Male > klicken, um den Endwert zu erreichen. Damit es schneller geht, habe ich m= ir > gedacht, dass ich mit einem Klick in dem Edit-Feld mit der Maus / Finger > auf dem Tablet ein neues von mir geschriebenes Keypad-Objekt =C3=B6ffne, = mit > dessen Hilfe man den Endwert sofort eintippt und mit OK diesen Wert in das > Edit-Feld =C3=BCbernimmt. Jetzt kenne ich Deine Aufgabe und einige Ideen, wei=C3=9F ich aber immer no= ch=20 nicht, wo genau Dein Problem liegt? Vielleicht liegt es ja an mir. Ich bin = ja=20 schon ein ziemlich alter Knochen. Also hilf mir, Dein spezifischen Problem = zu=20 verstehen. So etwas wie: ich erwarte dieses Verhalten, bekomme aber jenes=20 Verhalten. > > Ein whitespace damaged code ist ziemlich unbrauchbar, you know > Das habe ich nicht verstanden, was Du damit meinst. white space damaged ist besonders f=C3=BCr Python code ziemlich bl=C3=B6d, = weil die=20 fehlenden Einr=C3=BCckungen den Code unbrauchbar machen. Generell sollte so= lcher=20 code so eingef=C3=BCgt werden, dass ein cut und paste m=C3=B6glich ist. > Damit es klar wird, werde ich den Link zu meinen eigentlichen > GUIs-Screenshots auch hinzuf=C3=BCgen, um es besser verstehen zu k=C3=B6n= nen. >=20 > Screenshot von MainWindow-GUI: https://imgur.com/I1Fdf2f > Screenshot von Settings-GUI: https://imgur.com/Ot1OF4J >=20 > Wenn ich auf dem Settings-Fenster (in meinem Beispiel Window 1 oder > MainWindow) bin, wo die ganzen QLineEdit-Felder vorhanden sind, sind alle > Felder sichtbar. Man kann ihre Werte entweder mit =C2=AB+=C2=BB oder =C2= =AB-=C2=BB =C3=A4ndern oder > mit einem Klick in das Feld das Keypad-Fenster (in meinem Beispiel > Keypad_Window) =C3=B6ffnen. Aber dieses Fenster muss erst dann erscheinen= , wenn > auf das Feld eingeklickt wird. In meinem Beispiel-Code erscheint das > =C2=ABWindow 1=C2=BB (die original GUI Settings) ohne Edit-Feld Okay, so langsam d=C3=A4mmert es mir. Aber versuche mal den Beispielcode so= =20 einzuf=C3=BCgen/bereitzustellen, dass die Ausf=C3=BChrung per cut und paste= gelingt.=20 Du kannst Objekte in .show() und .hide() sichtbar machen und wieder=20 verstecken.=20 > > Schau mal in die PyQt Beispiele, da solltest du alle Arten von > > subclassing, event handling, und so finden. Wichtig sind da noch die > > return codes aus den event handlern >=20 > Ja, ich habe die verschieden Versionen gesehen. Gerade deswegen bin ich > verwirrt. Ich weiss nicht, wann ich die =C2=AB__init__()=C2=BB und =C2=AB= super()=C2=BB Zeilen > so leer lasse und wann bringe ich in =C2=AB__init__=C2=BB das Argument = =C2=ABparent=3DNone=C2=BB > und =C2=ABparent=C2=BB in =C2=ABSuper().__init__(parent)=C2=BB. In versch= iedenen Beispiele sind > manchmal die eine Version in den anderen die andere Version oder sogar > manchmal eine Kombination der beiden. Ich konnte daraus nicht schlau > werden. Nirgendwo habe ich eine einfache klare Dokumentation bei meinen > Google-Searches zu diesem Thema gefunden. Wie Du z. B. in Deinem Vorschlag > erw=C3=A4hnt hast, warum soll ich den "init"-Part wegnehmen. Was hat das = zur > Folge, wenn es dadrin ist? >=20 > Daher meine Frage, ob jemand mir wirklich erkl=C3=A4ren kann, wann ich die > Argument-Felder leer lasse und wann ich sie bef=C3=BCllen muss. Ich hoffe= , dass > mit oben gesagten / geschriebenen Du mein Problem besser verstehst und > vielleicht mir eine Ausweg zeigst. parent erm=C3=B6glicht es, eine baumartige Eltern/Kind Beziehung zwischen O= bjekten=20 (QObjects) aufzubauen. Anders als im echten Leben ist die Idee dabei, dass = =20 Kinder mit Ihren Eltern sterben. Wie im echten Leben hat diese Beziehung au= ch=20 Seiteneffekte.=20 Z.B, Du hast einen Dialog, der einen anderen Dialog aufruft. Wenn Du jetzt = den=20 Eltern-Dialog schlie=C3=9Ft und willst, dass der Kind-Dialog auch verschwin= det,=20 dann solltest Du dem Kind das parent-Argument mitgeben. Seiteneffekt ist=20 dabei, dass der Kind-Dialog =C3=BCber dem Eltern-Dialog zentriert. Wichtig ist parent f=C3=BCr von QObjects ableiteten Subklassen, um hier wei= terhin=20 eine explizite Eltern/Kind Beziehung zu erlauben/erm=C3=B6glichen. Ziel ist= dabei,=20 Objekte so lange wie n=C3=B6tig und so kurz, wie m=C3=B6glich am Leben zu e= rhalten. Innerhalb von Dialogen/Composite Widgets z.B. wird heutzutage meistens eine= =20 implizite Beziehung =C3=BCber Layouts hergestellt.=20 Aber wie im echten Leben wird das Beziehungsleben irgendwann kompliziert. Cheers, Pete