2015-01-12 9 views
5

Ich habe an einer GUI mit Perl Tkx gearbeitet, und festgestellt, dass es zwei separate Funktionen gibt, die Sie verwenden können, um Schaltflächen zu erstellen. (button und ttk__button).Perl Tkx, Was ist der Unterschied zwischen "button" und "ttk__button"?

Bis jetzt der einzige Unterschied, den ich fand, ist, dass die button Funktion scheint, den Text in der Mitte zu rechtfertigen, während die ttk__button Funktion scheint, den Text zu rechtfertigen.


Beispiel mit button:

#!/usr/bin/perl 

use strict; 
use warnings; 

use Tkx; 

my $text = "Hello\nworld!\n\nThis is some text..."; 
my $mw = Tkx::widget->new("."); 

my $b = $mw->new_button(
    -text => $text, 
    -command => sub { exit; }, 
); 
$b->g_grid; 

Tkx::MainLoop() 

Dieses Skript wird den Text zentrieren:

Centered text


Beispiel ttk__button mit:

Dieses Skript den Text rechtfertigt links:

Left justified text


Ich frage mich, was andere Unterschiede gibt es zwischen diesen beiden Funktionen ist und ob es ein besonderer Grund ist, gibt es zwei separate Funktionen, die Schaltflächen erstellen Ist einer davon in der Regel besser zu verwenden als der andere?

Gibt es auch eine Möglichkeit, den Text mit der ttk__button Funktion zu zentrieren?

EDIT:

Ich fügte hinzu, die "Tcl" Tag dazu da Perl Tkx im wesentlichen aus von Tcl gebaut wird. Ich bin ziemlich gut mit Perl, aber ich bin ein wenig Anfänger, wenn es um Tcl geht.

Obwohl es auf den ersten Blick nicht so aussieht, ist dies eigentlich eher eine Tcl-Frage als eine Perl-Frage, also würde ich gerne eine Antwort von jemandem hören, der Erfahrung mit Tcl hat.


HINWEIS:

Zum Zentrieren von Text in einem ttk__button die folgende Zeile in Ihrem Code hinzu:

Tkx::ttk__style_configure('TButton', -justify => 'center');

Antwort

5

Button ist einer der, sagen wir mal, 'traditionelle' Widgets. Die Familie der Widgets ttk ist moderner und wurde entwickelt, um auf die Anzeigekonfiguration des Host-Betriebssystems zu achten. Wenn Sie möchten, dass Ihre App mit dem von Ihrem Nutzer gewählten Thema übereinstimmt, verwenden Sie die Widgets ttk. Auf der anderen Seite, wenn Sie viel Arbeit machen, um hinein zu passen, oder möchten, dass Ihre Anwendung wie ein wunde Daumen herausragt, dann verwenden Sie auf alle Fälle die "traditionellen" Widgets.

Feinere Steuerung von ttk Widgets kann über die Option -style ausgeübt werden.Vielleicht möchten Sie sich die Tutorial-Seite @http://www.tkdocs.com/tutorial/styles.html ansehen.

Für was es wert ist, enthalten Schaltflächen häufig nicht mehrzeiligen Text. Es gibt andere Widgets, die im Hinblick auf das Textlayout entwickelt wurden.

EDIT:

Von tjwrona1992 Kommentar: Tkx::ttk__style_configure('TButton', -justify => 'center');

+0

Okay, genau das habe ich mich gefragt, aber gibt es eine Möglichkeit, den Text auf eine 'ttk-Taste' zu ​​zentrieren? Wenn ich mehrere Textzeilen verwende und es alles ausrichtet, sieht es hässlich aus. – tjwrona1992

+0

Persönlich würde ich das Design neu bewerten, das mehrzeiligen Text in einer Schaltfläche platziert. Eine feinere Steuerung von "ttk" -Widgets kann über das Attribut "-style" erfolgen. – tjd

+0

Nun, ich habe einen Knopf, der in einem relativ kleinen Raum passen muss. Selbst wenn es seinen eigenen Weg hatte, den Text, der nützlich sein könnte, zu umschreiben. Gerade jetzt, wenn ich nicht "\ n" verwende, um es mehrere Zeilen zu überschreiten, wird es alles in eine Zeile setzen und das Display strecken, um es anzupassen, das auch nicht sehr gut aussieht. – tjwrona1992

2

Tk hat zwei Klassen von Widgets: traditionelle und tiled. Traditionelle Widgets sind solche, die es seit Tk gab. Gekachelte Widgets sind relativ neu. Sie emulieren native Widgets durch Unterstützung für Themen. Viele (aber nicht alle) Widgets sind in beiden Formen verfügbar. Tile begann als separate Bibliothek, bevor es in Tk 8.5 als Ttk integriert wurde.

Leider ist der Wechsel von traditionellen zu gekachelten Tk-Widgets nicht so einfach wie das Hinzufügen einer "use ttk" -Anweisung, da traditionelle und gekachelte Widgets nicht notwendigerweise die gleichen Konfigurationsoptionen haben.

In Tkx wird das Präfix ttk verwendet, um die gekachelte Version eines Widgets anzugeben. Das Tcl Tk Wiki hat eine comparison von ttk Widgets mit verschiedenen Themen. (Das "klassische" Thema paßt das Aussehen & Gefühl des traditionellen Tk.) Hier ist, wie button und ttk__button auf meinem System machen (Win7):

button vs ttk button

Traditionelle Widgets sind flexibler. Sie können weitere Attribute pro Widget konfigurieren. Gekachelte Widgets sehen besser aus (d. H. Nativ) und erleichtern das Ändern des Gesamtbildes & Gefühl Ihrer Anwendung.

Persönlich verwende ich immer die ttk Widgets, wenn verfügbar.