Tkinter Dialer Tool Layout anpasen und andere Fragen

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo Leute,

    ich möchte mit tkinter ein Dialer Tool basteln und bräuchte mal einen Tipp, wie ich es anstellen kann, dass wenn das Tool im Fullscreenmode läuft, sich die Größe des Labelfeld und alle Buttons inkl. der ( gleichen ) Schriftgröße automatisch mit an die Fenstergröße anpasst. ( Bitte so einfach wie möglich, da ich gerade erst mit Python angefangen hab. :) )

    Einmal editiert, zuletzt von Fliegenhals (24. September 2014 um 01:15)

  • Tkinter Dialer Tool Layout anpasen und andere Fragen? Schau mal ob du hier fündig wirst!

    • Offizieller Beitrag

    jetzt mal rein Theoretisch gesprochen... Hast ja keinen Code beigelegt ;). Du definierst ja irgendwo die Grösse der buttons und weisst wieviele buttons pro Reihe du willst. Jetzt musst du dir die Grösse des Fensters holen und die Abmasse dynamisch berechnen lassen. (Z.B. 1000px / 4 = 4 buttons mit 250px Breite, ohne Rand)
    Ich weiss jetzt nicht ob ich es einen Fenster-Grössen-Wechsel-event gibt, in welchem du berechnung durchführen lassen könntest.

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Hallo Fliegenhals,

    mit Python kenne ich mich nun gar nicht aus. Aber ich habe mal etwas Ähnliches in einer anderen Programmiersprache geschrieben.

    Du hast einmal die Möglichkeit, die Auflösung des Screens zu nutzen. Das macht nur Sinn, wenn Deine Anwendung immer im Fullscreen-Modus läuft und eine andere Fenstergrösse niemals möglich ist.

    Willst Du aber, dass das Fenster verschiedene Grössen annimmt, dann musst Du Dich der aktuellen Fenstergrösse bedienen und dann so berechnen, wie dbv das angedeutet hat. Eine ähnliche Berechnung gilt dann auch für die Bildschirmhöhe und die Grösse des Zeichensatzes. Denn in einer grossen Schaltfläche Text der Grösse 10 wirkt deplatziert.

    Wenn Du dann die Grösse des Fensters änderst (über ein Resizing-Event), dann ändert die entsprechende Funktion automatisch Grösse und Position der Schaltflächen als auch Grösse des beteiligten Zeichensatzes.

    In der einschlägigen Literatur ist dies als bildschirmgrössen-unabhängige Programmierung oder relative Bildschirmpositionierung beschrieben.

    Gutes Gelingen!

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (24. September 2014 um 15:15)

  • Das Stichwort wird wohl ''grid layout'' sein. Wenn ich bei pyQT mittels Designer ein Grid Layout erstelle und per drag'n'drop ein paar Buttons einfüge, dann vergrössern/verkleinern die sich je nach Fenstergrösse.

    Hier mal was ausm Netz:

  • Hi Andreas, ich bin nicht unbedingt an Python gebunden, da ich aber von GUI Programmierung überhaupt keinen Plan habe, dachte ich dass ich mit Python (TKinter) am ehsten etwas zusammen gebastelt bekomme. Das Tool ist für ein älteres, stark sehbehindertes Familienmitglied und soll so groß und so einfach wie möglich sein. Man soll eine Telefonnummer eingeben können, welche man sich per espeak Shellkommando anhören kann und dann, per echo Shell Kommando von einem per Bluetooth gekoppeltem Handy, gewählt bzw. beendet wird. Auch würde ich gerne noch eine Telefonbuch Funktion inkl. virtueller Tastatur mit einbauen wollen, in dem man Kontakte verwalten und für eine Schnellwahl verwenden kann. ( Da hab ich aber noch überhaupt keine Idee, mit was ich dass umsetzen kann, Liste, kleine Datenbank, o.ä. )

    Das Tool soll eigenlich immer im Fullscreenmode ( z.Z. 1280x1024 ) laufen, ich wollte bloß verhindern, das wenn ich einen anderen Monitor am RPi anschließe, man nicht nochmal den ganzen Code ändern muß. Ich hab keinen Code gepostet, um mögliche Antworten nicht auf eine bestimmte Methode festzulegen bzw. einzuschränken. Letztendlich ist die Methode wie es sich umsetzten läßt egal, es sollte nur einfach genug sein, das ich als Anfänger damit zurecht komme.

    Mein ursprünglicher Plan war es eigendlich, ein grafisches Calculator Tool für meine Zwecke umzubauen, doch da werden die meisten Buttons mit einer Funktion erstellt und damit bin ich nicht mehr in der Lage, die Schriftgröße der Buttons & des Entryfeldes zu ändern und im Anschluß über einige Buttons ein Pictogramm zu legen. ( Ich hab mal eine Version meiner Arbeitsvorlage mit ettlichen Auskommentierungen angehangen. Wenn mir jemand sagen könnte, wie ich die Schriftgröße für alle Widgets anpassen und für die Buttons [, = / * - +] ein Piktogramm mit einer anderen Funktionen hinterlegen kann, wäre ich schonmal einen Schritt weiter.)

    calc_4mod.py


  • Das Stichwort wird wohl ''grid layout'' sein. Wenn ich bei pyQT mittels Designer ein Grid Layout erstelle und per drag'n'drop ein paar Buttons einfüge, dann vergrössern/verkleinern die sich je nach Fenstergrösse.

    Hier mal was ausm Netz:

    Ich hab den Beispielcode mal auf 4 x 4 Buttons angepasst, das Ergebnis ist leider auch nicht befriedigend. :neutral:

  • Auf Win 8.1 sieht es so aus. Wie es aufm RPi aussieht, kann ich nicht sagen, da dort kein Monitor angeschlossen ist.

    Spoiler anzeigen
  • Hallo Fliegenhals,


    Hi Andreas, ich bin nicht unbedingt an Python gebunden, da ich aber von GUI Programmierung überhaupt keinen Plan habe, dachte ich dass ich mit Python (TKinter) am ehsten etwas zusammen gebastelt bekomme. Das Tool ist für ein älteres, stark sehbehindertes Familienmitglied und soll so groß und so einfach wie möglich sein. Man soll eine Telefonnummer eingeben können, welche man sich per espeak Shellkommando anhören kann und dann, per echo Shell Kommando von einem per Bluetooth gekoppeltem Handy, gewählt bzw. beendet wird. Auch würde ich gerne noch eine Telefonbuch Funktion inkl. virtueller Tastatur mit einbauen wollen, in dem man Kontakte verwalten und für eine Schnellwahl verwenden kann. ( Da hab ich aber noch überhaupt keine Idee, mit was ich dass umsetzen kann, Liste, kleine Datenbank, o.ä. )

    tolle Idee und eine sinnvolle Anwendung.

    Hm, die Wahl der Mittel, Programmiersprache, Programmierumgebung, ... hängt von ganz vielen Gegebenheiten ab.

    Einerseits bin ich mir sicher, dass Dein Vorhaben mit Python zu realisieren sein müsste, allerdings müssten dann die Pythonianer unter uns den für Dich erforderlichen Input geben.

    Ich will jetzt absolut keine Werbung für die Programmiersprache Icon machen. Aber wenn Du noch am Anfng des Programmieren-Lernen stehst, dann ist es eigentlich egal, welche Sprache es trifft - solange diese das Zeug dazu hat, das Ziel möglichst einfach zu erreichen.

    Wenn ich eine Anwendung mit GUI-Umgebung programmieren möchte, dann erstelle ich diese mit dem Programm VIB. VIB erzeugt einen lauffähigen Prototyp des Programms. Dadurch wird es möglich, die Bedienbarkeit des Programms zu testen - die Oberfläche zu optimieren.
    Diese erstellt mir nach Abschluss einen Quellcode in der Programmiersprache Icon. Ich muss dann eigentlich nur noch die sog. Callbacks (Funktionen, die nach Betätigen der jeweiligen Bedienfelder angesprungen werden) mit Leben füllen.

    Icon kann auch sprechen und mit Hilfe von Google-Translate gesprochene Worte in Kommandos für das entsprechende Programm umwandeln. Also etwas wie "Enkel Thomas anrufen" würde dazu führen, dass aus einer Datenbank = Liste der Telefonnummern "Enkel Thomas" gesucht wird und dessen Nummer gewählt wird.

    Selbstverständlich ist die Verwaltung dieser Datenbank auch recht einfach. Die Eingabe neuer Nummern kann man auch per Spracheingabe umsetzen - und hätte dadurch maximalen Komfort.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo Fliegenhals,

    eine Prozedur, die alle Bedienelemente relativ zur veränderlichen Fenstergröße, berechnet, neu anordnet und die Schriftgröße anpasst, kann z.B. so aussehen:

    Diese Funktion wird als drittes Argument von ProcessEvent() gesetzt - die vereinfachte Hauptprozedur kann dann so aussehen:

    Ein paar Screenshots sind angefügt.

    forum-raspberrypi.de/attachment/4198/

    Beste Grüße

    Andreas

    Bilder

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (27. September 2014 um 23:38)

  • Hallo Andreas, besten Dank für deinen Hilfeversuch, aber ich glaube dass dein Beispielcode mich etwas überfordert. Ich wüßte jetzt auch noch nicht, wie ich diesen Code "Pythontauglich" bekomme, zumal ich auch noch die Hoffnung habe, es mit Tkinter Bordmitteln umsetzten zu können. Ich denke auch dass, es vermutlich relativ einfach ist, wenn man nur weiß, wie es geht :^^: Zur Not muß ich die ganze Formatierung halt "fest verdrahten", es bläht zwar Alles etwas auf, ist aber ersteinmal kein Problem.

    Vielleicht hat ja noch jemand ein möglichst einfaches Beispiel für Python, wie man die Verwaltung der Telefonkontakte managen kann, so dass man einen Datensatz ( wie z.B. Nachname, Voname | Tel. Nr. ) anlegen, ändern und die Tel. Nr. daraus wieder für die Verwendung in ein Labelfeld als String einlesen kann.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!