Benutzeroberfläche mit "mehreren GUIs"
@BurgunderBraten: was ist denn das konkrete "Problem"? GUI-Programme können sehr unterschiedlich aussehen. Es gibt normalerweise verschiedene Fenster, die unterschiedliche Aufgaben haben, aber einen mehr oder weniger vorgegebenen Aufbau. Was willst Du nun "dynamisch" machen?
Dann such doch mal durch github mit dem Stichwort pyqt5. Da finden man Tonnen an Code und Projekten. Wie zb
https://github.com/ninja-ide/ninja-ide
Die recht beliebte Spyder IDE: https://github.com/spyder-ide/spyder/tree/master/spyder
Persepolis download manager https://github.com/persepolisdm/persepolis
Und so weiter und so fort... https://github.com/search?o=desc&q=pyqt ... positories
https://github.com/ninja-ide/ninja-ide
Die recht beliebte Spyder IDE: https://github.com/spyder-ide/spyder/tree/master/spyder
Persepolis download manager https://github.com/persepolisdm/persepolis
Und so weiter und so fort... https://github.com/search?o=desc&q=pyqt ... positories
- __blackjack__
- User
- Beiträge: 13003
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@BurgunderBraten: Wenn ich mich mal selbst aus der allerersten Antwort auf Deine Frage zitieren dürfte: „Für Flächen wo man zwischen verschiedenen Inhalten wechseln können soll, sind auch Tool Box, das Tab Widget, und das Stacked Widget interessant.“ Das sind die drei Widgets wenn man mehrere Seiten, so ähnlich wie bei Webseiten, in der GUI haben möchte. Da kämen dann noch das Stichwort Wizard dazu wenn man diesen typischen „wir leiten den Benutzer durch mehrere Schritte mit »Weiter«- und »Zurück«-Schaltflächen“. Eventuell könnte man noch einen MDI-Bereich dazu nehmen, wo man ja mehrere Unterfenster drin erstellen kann, aber auf jeden Fall auch einfach QWidget oder gar mehrere QMainWindow um einfach mehrere Fenster zu öffnen.
Für all diese Sachen sollte die Qt-Dokumentation eigentlich ausreichend sein. Ja, man muss ein bisschen C++ lesen lernen und erfassen wie das vom Python-Wrapper auf Python umgesetzt wird, um die Beispiele zu verstehen, aber das ist im Vergleich zum programmieren in C++ *wesentlich* einfacher.
Konkretere Antworten kann man schlecht geben solange Du kein konkreteres Problem formulierst. Ich sehe jedenfalls keines. Wenn man in Qt eine GUI mit Code erstellen kann, also 100% ”dynamisch” und eine GUI mit dem Designer erstellen kann, also 100% ”statisch”, dann hat man auch das nötige Wissen um eine GUI mit dem Designer zu erstellen wo man an bestimmten Stellen Platzhalter, also beispielsweise leere Widgets einsetzen, die man im Programm dann dynamisch mit Inhalt füllen kann. Kannst Du das beides? Also eine GUI mit und ohne Designer erstellen? Falls nicht, lerne das und komm dann mit konkreten Problemen wieder die man dann auch konkreter beantworten kann.
Für all diese Sachen sollte die Qt-Dokumentation eigentlich ausreichend sein. Ja, man muss ein bisschen C++ lesen lernen und erfassen wie das vom Python-Wrapper auf Python umgesetzt wird, um die Beispiele zu verstehen, aber das ist im Vergleich zum programmieren in C++ *wesentlich* einfacher.
Konkretere Antworten kann man schlecht geben solange Du kein konkreteres Problem formulierst. Ich sehe jedenfalls keines. Wenn man in Qt eine GUI mit Code erstellen kann, also 100% ”dynamisch” und eine GUI mit dem Designer erstellen kann, also 100% ”statisch”, dann hat man auch das nötige Wissen um eine GUI mit dem Designer zu erstellen wo man an bestimmten Stellen Platzhalter, also beispielsweise leere Widgets einsetzen, die man im Programm dann dynamisch mit Inhalt füllen kann. Kannst Du das beides? Also eine GUI mit und ohne Designer erstellen? Falls nicht, lerne das und komm dann mit konkreten Problemen wieder die man dann auch konkreter beantworten kann.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
-
- User
- Beiträge: 7
- Registriert: Dienstag 3. Juli 2018, 10:28
Das "Problem" soll eigentlich beispielsweise so aussehen wie bei einer Web-Seite oder eben bei jeder anderen Applikation:Sirius3 hat geschrieben: ↑Sonntag 10. Februar 2019, 10:27 @BurgunderBraten: was ist denn das konkrete "Problem"? GUI-Programme können sehr unterschiedlich aussehen. Es gibt normalerweise verschiedene Fenster, die unterschiedliche Aufgaben haben, aber einen mehr oder weniger vorgegebenen Aufbau. Was willst Du nun "dynamisch" machen?
Ein Applikationsfenster auf welchem am linken Bildschirmrand ein Menü mit verschiedenen Buttons/Flächen zum Anklicken ist, für die verschiedenen Menüpunkte. Der rechte Bildschirmbereich soll dann die Inhalte darstellen, je nach angeklicktem Menüpunkt.
Um ein einfaches Beispiel zu verwenden:
Im linken fixen Bildschirmbereich sind zwei Buttons, Button 1 und Button 2. Im rechten "dynamischen" Bildschirmbereich wird dann je nachdem welcher Button gedrückt wurde ein Inhalt dargestellt. Drücke ich z.B. Button 1 dann erscheint ein Label mit "Button eins gedrückt". Wird Button 2 gedrückt "verschwindet" Label 1 und es erscheint ein Textfeld mit dem Inhalt "Button 2 wurde gedrückt", usw....
Dafür hätte ich gerne ein Beispielcode, wie dies umgesetzt werden kann. Es muss nicht zwingend mit Qt realisiert werden, es geht mir generell mehr um das Prinzip.
Also willst Du so etwas wie ein Tabbed-View.
Beispiel: https://pythonspot.com/pyqt5-tabs/
Beispiel: https://pythonspot.com/pyqt5-tabs/
- __blackjack__
- User
- Beiträge: 13003
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@BurgunderBraten: Wo hast Du denn dabei jetzt konkret ein Problem bei der Umsetzung? Wie sieht Deine GUI und Dein Code bisher aus? Welche Gedanken hast Du Dir über die Layouts gemacht? Welche Widgets für die wechselnden Seiten in Frage kommen habe ich ja nun schon *zweimal* geschrieben, das werde ich jetzt nicht noch einmal kopieren. Eines davon ist für das jetzt beschriebene, konkretere Problem super geeignet.
Ich sehe hier nichts ”dynamisches” und nichts was irgendwie schwierig oder exotisch wäre, wenn man sich halt mal die Grundlagen von Python und Qt drauf schafft. Die beschriebene GUI lässt sich komplett mit dem Designer zusammen klicken, aber auch leicht per Code erstellen, denn so viele Teile sind das ja letztlich nicht. 11 wenn ich mich nicht verzählt habe. Davon 4 Layouts. Im Code verbindet man dann noch die passenden Signale der Buttons mit ein bisschen Code der die jeweilige Seite aktiviert/auswählt, und das war es dann auch schon. Python und objektorientierte Programmierung braucht man natürlich als Voraussetzung. `functools.partial()` könnte nützlich sein.
Ich zeige das jetzt, auch wenn es einfach ist, nicht konkreter, weil Du bisher Null Eigenleistung gezeigt hast zu einer Lösung zu kommen.
Ich sehe hier nichts ”dynamisches” und nichts was irgendwie schwierig oder exotisch wäre, wenn man sich halt mal die Grundlagen von Python und Qt drauf schafft. Die beschriebene GUI lässt sich komplett mit dem Designer zusammen klicken, aber auch leicht per Code erstellen, denn so viele Teile sind das ja letztlich nicht. 11 wenn ich mich nicht verzählt habe. Davon 4 Layouts. Im Code verbindet man dann noch die passenden Signale der Buttons mit ein bisschen Code der die jeweilige Seite aktiviert/auswählt, und das war es dann auch schon. Python und objektorientierte Programmierung braucht man natürlich als Voraussetzung. `functools.partial()` könnte nützlich sein.
Ich zeige das jetzt, auch wenn es einfach ist, nicht konkreter, weil Du bisher Null Eigenleistung gezeigt hast zu einer Lösung zu kommen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
-
- User
- Beiträge: 7
- Registriert: Dienstag 3. Juli 2018, 10:28
Also das "Problem" ist ja kein Problem an sich, sondern ich bin am überlegen mit was ich in Zukunft weiterprogrammiere. Ich hab meine "Anwendung" bis dato in PHP, HTML etc. als "Web-Anwendung". Ich bin allerdings kein wirklicher Freund von Browser basierten "Anwendungen", sondern mehr ein Freund von "klassischen" Desktop-Anwendungen.__blackjack__ hat geschrieben: ↑Montag 11. Februar 2019, 10:28 @BurgunderBraten: Wo hast Du denn dabei jetzt konkret ein Problem bei der Umsetzung? Wie sieht Deine GUI und Dein Code bisher aus? Welche Gedanken hast Du Dir über die Layouts gemacht? Welche Widgets für die wechselnden Seiten in Frage kommen habe ich ja nun schon *zweimal* geschrieben, das werde ich jetzt nicht noch einmal kopieren. Eines davon ist für das jetzt beschriebene, konkretere Problem super geeignet.
Ich sehe hier nichts ”dynamisches” und nichts was irgendwie schwierig oder exotisch wäre, wenn man sich halt mal die Grundlagen von Python und Qt drauf schafft. Die beschriebene GUI lässt sich komplett mit dem Designer zusammen klicken, aber auch leicht per Code erstellen, denn so viele Teile sind das ja letztlich nicht. 11 wenn ich mich nicht verzählt habe. Davon 4 Layouts. Im Code verbindet man dann noch die passenden Signale der Buttons mit ein bisschen Code der die jeweilige Seite aktiviert/auswählt, und das war es dann auch schon. Python und objektorientierte Programmierung braucht man natürlich als Voraussetzung. `functools.partial()` könnte nützlich sein.
Ich zeige das jetzt, auch wenn es einfach ist, nicht konkreter, weil Du bisher Null Eigenleistung gezeigt hast zu einer Lösung zu kommen.
Bevor ich mich mit PHP etc. beschäftigt hatte, hatte ich mir das Buch "Python 3 - Das umfassende Handbuch" von Rheinwerk-Verlag gekauft. Dort ist natürlich auch Qt5 etc. beschrieben, was auch soweit nachvollziehbar war, jedoch eben nur mit den üblichen Standardbeispielen mit einer statischen Seite. Jetzt möchte ich eigentlich den "Aufwand" abschätzen wenn die GUI eben "umfangreicher" wird. In den Büchern hört es da immer auf, und dann steht man da und weiß nicht weiter. Deshalb würde mich der einfache Beispielcode wie oben erwähnt ja schon mal zum reinschnuppern helfen. Ich hab selber da noch keinen Ansatz und keinen Code.
Da die Anwendung nur für mich Privat ist bleib ich halt beim Web-Design falls das mit Python zu kompliziert ist, reicht mir letztendlich auch. Aber eigentlich war mir Python beim anfänglichen lernen ja sympathisch.
Benutz ein StackedWidget, und lass deine drei Buttons entscheiden, welchen Index du setzt.
https://doc.qt.io/qt-5/qstackedwidget.html#details
Fang an, und wenn du fragen hast, stell die hier.
Ich bin persoenlich der Meinung, dass der Browser das leistungsfaehigere Tool ist, wie die immer zahlreicher werdenden Electron-Anwendungen zeigen. Natuerlich nicht mit PHP im Backend, und "fetten" JS-Frontends. Sehen besser aus, koennen mehr, sind cooler zu stylen (auch arbeitsteilig, ganz anders als Qt). YMMV.
https://doc.qt.io/qt-5/qstackedwidget.html#details
Fang an, und wenn du fragen hast, stell die hier.
Ich bin persoenlich der Meinung, dass der Browser das leistungsfaehigere Tool ist, wie die immer zahlreicher werdenden Electron-Anwendungen zeigen. Natuerlich nicht mit PHP im Backend, und "fetten" JS-Frontends. Sehen besser aus, koennen mehr, sind cooler zu stylen (auch arbeitsteilig, ganz anders als Qt). YMMV.
-
- User
- Beiträge: 7
- Registriert: Dienstag 3. Juli 2018, 10:28
Vielen Dank, vor allem auch für deine persönliche Meinung bezüglich dem Browser!__deets__ hat geschrieben: ↑Montag 11. Februar 2019, 12:46 Benutz ein StackedWidget, und lass deine drei Buttons entscheiden, welchen Index du setzt.
https://doc.qt.io/qt-5/qstackedwidget.html#details
Fang an, und wenn du fragen hast, stell die hier.
Ich bin persoenlich der Meinung, dass der Browser das leistungsfaehigere Tool ist, wie die immer zahlreicher werdenden Electron-Anwendungen zeigen. Natuerlich nicht mit PHP im Backend, und "fetten" JS-Frontends. Sehen besser aus, koennen mehr, sind cooler zu stylen (auch arbeitsteilig, ganz anders als Qt). YMMV.
Ich werde mich mal mit den StackedWidget ein bisschen näher befassen.
Habe hier nochmal ein sehr einfaches Beispiel für das QStackedWidget mit Python-Code gefunden: https://www.tutorialspoint.com/pyqt/pyq ... widget.htm
Mit freunldichen Grüßen
habanero
Mit freunldichen Grüßen
habanero
-
- User
- Beiträge: 407
- Registriert: Freitag 6. August 2010, 17:03
Da es im Qt Designer kein eigenes Platzhalter-Widget gibt, vermute ich, dass man als Platzhalter genau das Widget nehmen muss, das man im Programm dynamisch mit Inhalt füllen möchte. Stimmt das?__blackjack__ hat geschrieben: ↑Sonntag 10. Februar 2019, 12:23 Wenn man in Qt eine GUI mit Code erstellen kann, also 100% ”dynamisch” und eine GUI mit dem Designer erstellen kann, also 100% ”statisch”, dann hat man auch das nötige Wissen um eine GUI mit dem Designer zu erstellen wo man an bestimmten Stellen Platzhalter, also beispielsweise leere Widgets einsetzen, die man im Programm dann dynamisch mit Inhalt füllen kann.
Vielen Widgets kann man im Qt Designer auch einen Text zuweisen. Lässt man das Feld bei einem Platzhalter einfach leer oder gibt es da eine Konvention? Ein QLabel ohne Text in einem Formular in Qt Designer wäre allerdings ziemlich unsichtbar.
Gruß
Atalanttore
Nein, das stimmt nicht. Du kannst jedes widget nehmen, und du solltest einen Namen vergeben, der es dir dann ermoeglicht, das widget einfach zu finden. Dann entfernst du es aus dem Elternteil, und ersetzt es durch dein selbst angelegtes.
https://doc.qt.io/qt-5/qlayout.html#replaceWidget
Und du darfst dem Widget im Designer nach Herzenslust etwas hinzufuegen. Es verschwindet ja eh. Eine Konvention gibt es da nicht.
https://doc.qt.io/qt-5/qlayout.html#replaceWidget
Und du darfst dem Widget im Designer nach Herzenslust etwas hinzufuegen. Es verschwindet ja eh. Eine Konvention gibt es da nicht.
- __blackjack__
- User
- Beiträge: 13003
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Wobei sich ein QWidget oder ein QFrame schon anbietet wenn man es mit Inhalt füllen möchte, statt es komplett durch etwas anderes zu ersetzen. Und QWidget auch wenn man es komplett ersetzt, einfach weil es das ”einfachste” Widget ist.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis