2017-11-24 7 views
1

Ich konvertiere eine alte Tcl/Tk-Anwendung (geschrieben vor 20 Jahren ...) und alle Ratschläge, was zu tun ist und wie es zu tun wäre sehr geschätzt .Hinweise für die Anpassung einer alten Tcl/Tk-Anwendung an moderne Standards

Im Moment könnte ich den Code anpassen und es funktioniert, aber es ist ein bisschen hässlich (das Aussehen & Gefühl ist nicht sehr zufriedenstellend, insbesondere, weil die Anwendung sowohl auf Linux als auch auf MacOS laufen sollte).

Um diesen Punkt zu verbessern, entdeckte ich zwei wichtige Änderungen in Tk: die Einführung von Themen Widgets und der Grid-Geometrie-Manager.

Q1) Von einem strengen Blickwinkel des Look & Feel, ist es eine "gute Idee", zu einem Grid-Ansatz (es ist eine große Arbeit) zu wechseln? Kann ich Grid und Pack mischen (weil für einige dynamische GUI-Teile der Pack-Ansatz einfacher ist)?

Für das Aussehen & fühlen, habe ich versucht, themed Widgets zu verwenden (Ersetzen Etikett nach ttk: Etikett, ...), aber es ist noch nicht zufriedenstellend.

Zum Beispiel hat die Anwendung einen Titelbereich (der abhängig von den ausgewählten Menüoptionen mehrere Titel enthalten kann). Im Grunde habe ich es mit:

ttk::style theme use clam 

ttk::frame .c -padding "4" 
grid .c -sticky nsew 

ttk::label .c.t -relief groove -borderwidth 4 -justify center -text \ 
    "this is a title.\nAnd its subtittle\nHow to increase line spacing ?\nWhat about font size ?" 
grid .c.t 

Der Titel kann mehrzeilige sein (und kann mit einem .c.t configure -text "new title" mehrmals geändert werden). Das Ergebnis ist

enter image description here

Q2) Wie kann ich den Raum zwischen zwei Linien zu erhöhen? (und wie kann ich die Schriftgröße erhöhen)?

Q3) Ich sah ein Text-Widget, aber ich konnte keine thematische Version davon finden? Habe ich etwas verpasst?

Vielen Dank

Antwort

1

q1) Ja, können Sie Pack und Netz mischen, wie Sie für richtig halten. Nur nicht im selben Rahmen. Manche Leute benutzen ausschließlich Gitter, andere mischen sie.

Es gibt einen Vergleich der Themen here. Ich finde, dass die Themen 'arc' und 'clearlooks' auf Linux gut aussehen. Lassen Sie für Mac OS X das Design als Standard 'aqua'.

q2) Neue Schriftarten können mit dem Befehl font erstellt werden. Für die ttk-Widgets können diese (in den meisten Fällen) mit dem Befehl ttk::style angewendet werden.

Für ttk::label wird der Zeilenabstand durch die Schriftart festgelegt, die gerade angezeigt wird.
Der Befehl text gibt Ihnen mehr Kontrolle über Zeilenabstand.

package require Tk 
ttk::style theme use clam 

ttk::frame .c -padding "4" 
grid .c -sticky nsew 

font create newfont 
font configure newfont -size 13 

ttk::style configure New.TLabel \ 
    -font newfont \ 
    -justify left 
ttk::label .c.t -relief groove -borderwidth 4 -text \ 
    "this is a\nmultiline text.\nHow to increase line spaceing ?" \ 
    -style New.TLabel 
grid .c.t 

q3) Der text Befehl keinen entsprechenden TTK Widget (auch nicht List-Box).

+0

Das Widget 'text' ist sehr komplex und die Art und Weise, wie es angezeigt wird, wird praktisch vollständig durch seinen Inhalt bestimmt. (Das 'canvas' ist ein anderes.) Sie können ein paar Tricks machen, indem Sie es in einen' ttk :: frame' und Konfigurations-Hacker einfügen, damit die Dinge wie ein ttk :: text aussehen ... und das muss viel einfacher sein als die riesige Menge an Arbeit in C, um eine echte zu machen! –

+0

Anstelle von 'listbox' kann' ttk :: treeview' verwendet werden. Und für 'text' gibt es eine nette Idee,' text' in einen ttk-Rahmen mit thematischem Rahmen zu setzen: http://wiki.tcl-lang.org/14796 –