Workshop: komplexe GUIs in tkinter?

Fragen zu Tkinter.
Antworten
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Ich habe schon des öfteren in Postings hier gelesen, dass tkinter für komplexe GUis kaum geeignet wäre.

Doch ich bin der Auffassung, dass sich gerade tkinter in besonderem Maße für komplexe GUIs eignet, denn man hat in tkinter Einfluss auf den Aufbau der GUI, den man dort nicht hat, wo man nur ein Interface zur GUI bekommt.

Was kann manche zu der Auffassung verleitet haben, dass komplexe GUIs in tkinter schwer zu verwirklichen wären?
Wahrscheinlich liegt es an der Weise, wie sie mit tkinter herumgespielt und implementiert haben. Da werden Klassen gemacht für GUI Container Widgets und denen werden dann Parameter übergeben, die man im Code zur GUI braucht.
Das ist schon schlimm und dann werden auch noch Referenzen auf Widgets übergeben, die ganz woanders sind und man dann in einem Code zu einem Frame auf Widgets in irgend einer Notebook Seite zugreift

So kann man natürlich keine komplexe GUI entwickeln, sondern scheitert schon sehr früh an solchen Verflechtungen.

Wenn man sich aber daran hält:

- GUI ist GUI
- und Code ist Code
- und den GUI Code greift man nicht an

Dann ist es sehr einfach, komplexe GUIs auch in tkinter zu entwickeln.

Besonders einfach wird es dann, wenn man den GUI Code gar nicht schreibt, sondern ein geeignetes Werkzeug zur GUI Generierung hat.
Da könnte man sich natürlich auch noch darüber unterhalten, was jetzt die geeignetsten Werkzeuge also GUI Builder wären.

PS: Wenn man in tkinter Vieles machen kann, was man bei anderen GUI Frameworks nicht machen kann, kann man sich auch komplexe GUIs versauen.
BlackJack

@Alfons Mittelmeyer: Ich würde mal sagen Du gehst von einer falschen Voraussetzung aus. Es geht nicht darum das man keine komplexen GUIs erstellen könnte, sondern das Tk altbacken aussieht und sich nicht an die heute üblichen und vom Benutzer erwarteten Vorgehensweisen hält, und nicht die Bandbreite an Widgets und Abstraktionen mitbringt, die man von modernen GUI-Rahmenwerken gewohnt ist. Man muss sich zu schnell zu viel selber basteln, was man heutzutage fertig erwartet.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

BlackJack hat geschrieben:@Alfons Mittelmeyer: Ich würde mal sagen Du gehst von einer falschen Voraussetzung aus. Es geht nicht darum das man keine komplexen GUIs erstellen könnte, sondern das Tk altbacken aussieht
Das Menü sieht gleich aus, wie die sonstigen Menüs, die man gewohnt ist. Label können es wohl nicht sein, denn das ist nur Text, Frames sehen überall gleich aus, nämlich gar nicht.

Sind es dann vielleicht die Buttons, die dir nicht gefallen?
BlackJack

@Alfons Mittelmeyer: Wie stark sich die Optik unterscheidet mag von System zu System unterschiedlich sein. Bei mir sehen die Menüs jedenfalls anders aus als in anderen Anwendungen. Ebenso andere Bedienelemente wie Scrollbalken, Checkboxen, und so weiter. Und es sieht halt aus wie GUIs in den 90ern. Dieser Kritikpunkt kommt ja auch nicht von mir, darum ist auch egal ob mir das gefällt oder nicht. Und was sich auch nicht an die Gepflogenheiten von mittlerweile wohl allen Desktopumgebungen hält, ist die Bedienung per Tastatur. Strg+X, Strg+C, Strg+V zum Ausschneiden, Kopieren, und Einfügen von Text ist zum Beispiel recht universell, macht Tk aber anders.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

BlackJack hat geschrieben:@Alfons Mittelmeyer: Wie stark sich die Optik unterscheidet mag von System zu System unterschiedlich sein. Bei mir sehen die Menüs jedenfalls anders aus als in anderen Anwendungen.
Das ist tatsächlich von System zu System unterschiedlich. Unter Linux schauen die Menüs genauso aus, wie etwa das Menü in IDLE. Als ich mir das aber unter Windows angesehen hatte, hatte ich einen Schrecken bekommen. Das in Linux einzeilige Menü war dort auf zwei Zeilen umgebrochen, obwohl genug Platz da war. Außerdem hatte ich command Buttons farblich abgehoben. Damit sie nicht direkt nebeneinanderliegen, habe ich commands ohne Funktion und ohne Labeltext als Zwischenraum verwendet. Unter Windows war plötzlich statt leer '()' zu sehen. Da sollte ich statt Leerstring ein Leerzeichen nehmen.

Und dann habe ich einen Button mit '.' als Text. Unter Linux ist der ganz quadratisch. Unter Windows ist er aber auf ein sehr schmales Rechteck geschrumpft.

Und was Strg+X, Strg+C, Strg+V betrifft, funktioniert das einwandfrei unter Linux. Könnte sein, dass auch da in Windows wieder etwas anderes geschieht.

Also ich finde, unter Linux sieht es gut aus. Allerdings verstehe ich nicht, warum das unter Windows anders ist.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Alfons Mittelmeyer hat geschrieben:
BlackJack hat geschrieben:@Alfons Mittelmeyer: Wie stark sich die Optik unterscheidet mag von System zu System unterschiedlich sein. Bei mir sehen die Menüs jedenfalls anders aus als in anderen Anwendungen.
Das ist tatsächlich von System zu System unterschiedlich. Unter Linux schauen die Menüs genauso aus, wie etwa das Menü in IDLE. Als ich mir das aber unter Windows angesehen hatte, hatte ich einen Schrecken bekommen. Das in Linux einzeilige Menü war dort auf zwei Zeilen umgebrochen, obwohl genug Platz da war. Außerdem hatte ich command Buttons farblich abgehoben. Damit sie nicht direkt nebeneinanderliegen, habe ich commands ohne Funktion und ohne Labeltext als Zwischenraum verwendet. Unter Windows war plötzlich statt leer '()' zu sehen. Da sollte ich statt Leerstring ein Leerzeichen nehmen.

Und dann habe ich einen Button mit '.' als Text. Unter Linux ist der ganz quadratisch. Unter Windows ist er aber auf ein sehr schmales Rechteck geschrumpft.

Und was Strg+X, Strg+C, Strg+V betrifft, funktioniert das einwandfrei unter Linux. Könnte sein, dass auch da in Windows wieder etwas anderes geschieht.

Also ich finde, unter Linux sieht es gut aus. Allerdings verstehe ich nicht, warum das unter Windows anders ist.
Da müßte ich mir mal ansehen, ob es unter Windows eventuell andere Defaultwerte für padx sind, denn die Anwendung war in Windows auch viel schmaler und das bei derselben tkinter Version.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

@BlackJack: es sieht von System zu System unterschiedlich aus, denn es gibt unterschiedliche Default Werte. Bei Buttons sind es bei padx 3m, also 3 mm, bei Windows ist es aber nur 1 Pixel.

Unverständlich, warum man das so macht.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
und nicht die Bandbreite an Widgets und Abstraktionen mitbringt, die man von modernen GUI-Rahmenwerken gewohnt ist.
Sehe ich genau so. Für einfache Sache mag Tkinter ok sein, aber für große GUIs, z.B. für Desktop-Programme, sind Qt und GTK+ Tkinter meilenweit überlegen.

Der einzige "Bonus" von Tkinter ist, dass Python es mit an Bord hat. Wenn das nicht so wäre, behaupte ich mal, wäre Tkinter in der Python-Welt am Rande der Bedeutungslosigkeit.

Gruß, noisefloor
BlackJack

Alfons Mittelmeyer hat geschrieben:Unter Linux schauen die Menüs genauso aus, wie etwa das Menü in IDLE.
Ähm, ja die Menüs einer Tk-Anwendung sehen genau so aus wie die anderer Tk-Anwendungen.
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

Also ich sehe i.S. Menüs etc. kein Unterschied unter Win 8.1
pyqt5
Bild
tkinter
Bild
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@lackschuh: die Unterschiede werden auch deutlicher, wenn man mal ein paar Element wie Buttons, Eingabefelder und Checkboxen einbaut.

Grundsätzlich halte ich die Optik von Tkinter auch für altbacken. Aber damit kann man IMHO in vielen Fällen leben, wenn du die Funktion stimmt. Wobei mir so keine "großen" Anwendung einfällt, die man "in der freien Wildbahn" so antrifft, die auf Tkinter als GUI setzt. Unter Linux läuft alles, was ich so kenne, auf Qt oder GTK+, unter Windows halt auf den Win-Komponenten wie WPF.

Deutlich schwerwiegender findet ich das oben genannte, nämlich den Funktionsumfang, die Anzahl der verfügbaren Widgets etc.

Gruß, noisefloor
__deets__
User
Beiträge: 14534
Registriert: Mittwoch 14. Oktober 2015, 14:29

Auch wenn Qt lange nicht perfekt ist - es ist auf einem guten Weg mit seinem MVC-Ansatz (QAbstractItemModel etc), und auch die neue QML-Technik bringt die UI in Bereiche, wie sie der Nutzer heute im Zeitalter der Mobil-UIs mit Animationen, Transparenz und "Material Design" erwartet.
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Apropos Menüs.
Es muss nicht immer der Jahrzehnte alte Stil sein:
Bild
Dear Tkinter friends. Welcome to the club of oldtimers!

Gruss wuf :wink:
Take it easy Mates!
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

lackschuh hat geschrieben:Also ich sehe i.S. Menüs etc. kein Unterschied unter Win 8.1
Ganz stimmt das nicht, denn bei tkintger in Windows sind die horizontalen Abstände geschrumpft.

Und dann ist das Aussehen von tkiner in Linux und Windows unterschiedlich.

So sieht mein GuiDesigner in Linux aus, wenn man fast alles unter dem Menü verbirgt, um Platz auf dem Desktop zu sparen:

Bild

Und so sieht es derzeit in Windows 7 aus:

Bild

Habe jetzt gesehen, woran es liegt, dass in Windows der Umbruch da ist und warum das Menü nicht mehr wie ein Menü aussieht:
Ich hatte versehentlich einen columnbreak gesetzt, was unter Linux ohne Wirkung blieb.

Dann hatte ich im Menü, bei commands Farben gesetzt, das ist aber in der Menüleiste in Windows ohne Wirkung.
Dann hatte ich leere commands ohne Text als Lerraum eingefügt. Da wurde in Windows '()' daraus.

Das grün ist auf meinem Raspberry Pi viel zu dunkel. Auf meinem MK808 B ware es ausreichend hell. Da werde ich die grünen Buttons und die grünen commands im Menü wohl in lightgreen wandeln.

Aber das ändert nichts, dass Farben in der Menüleiste unter Windows nicht funktionieren.

Das wird in Windows niemals so aussehen, wie unter Linux:

Code: Alles auswählen

try:
    import tkinter as tk
except ImportError:
    import Tkinter as tk

class Application(tk.Tk):

    def __init__(self,**kwargs):
        tk.Tk.__init__(self,**kwargs)
        # widget definitions ===================================
        self.menu = Menu_1(self)
        self.config(menu = self.menu, width=600)

class Menu_1(tk.Menu):

    def __init__(self,master,**kwargs):
        tk.Menu.__init__(self,master,**kwargs)
        self.config(activebackground='#ececac')
        # widget definitions ===================================
        self.add_cascade(label='File')
        self.add_cascade(label='Special')
        self.add_cascade(label='Help')
        self.add_command(background='lightgreen', label='Create ON')
        self.add_command(label = ' ',state='disabled')
        self.add_command(background='lightgreen', label='Config ON')
        self.add_command(label = ' ',state='disabled')
        self.add_command(background='orange', label='Layout OFF')
        self.add_command(label = ' ', state='disabled')
        self.add_command(background='lightgreen', label='Mouse ON')
        self.add_command(label='Hide')

if __name__ == '__main__':
    Application().mainloop()
Frage: kann man in Windows irgendwie unterscheiden, dass sich der Zustand, der durch die Farbe der command Buttons signalisiert wird, sich geändert hat. Statt grün und orange könnte es doch eine System Farbe geben, die auch im Menü funktioniert, oder?

Aber dann geht es leider nicht mehr unter Linux. Da bräuchte man also eine Unterscheidung, welches System es nun ist.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

wuf hat geschrieben:Apropos Menüs.
Es muss nicht immer der Jahrzehnte alte Stil sein
Farben in der Menüleiste? Wie machst Du das für Windows?
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi Alfons

Auf Windows Rechnern wird vom OS vorgegeben, welche Farbe eine Menüleiste haben muss. Trifft aber nicht für die Farbe der Untermenü zu. Da meine Programme eigentlich nicht für Windows bestimmt sind spielt es keine Rolle. Sonst kann man diese mittels VirtualBox und installiertem Linux laufen lassen.

Gruss wuf :wink:
Take it easy Mates!
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

@wuf: ja bei Untermenüs. Aber man sollte dann eines nicht vergessen, wenn man etwa den background setzt, auch den foreground zu setzen, ob nun normal, active oder disabled.

Bei weißem background sieht etwa ein helles Blau nicht schlecht als activebackground aus. Nur wenn dann Windows als Default für activeforeground weiß hat, dann wirkt das gar nicht mehr gut. Also, wenn man foreground oder background setzt, dann jeweils auch das Andere mitsetzen.
Antworten