2015-01-12 17 views
5

Pracowałem nad graficznym interfejsem użytkownika przy użyciu Perl Tkx i odkryłem, że istnieją dwie oddzielne funkcje, których można użyć do tworzenia przycisków. (button i ttk__button).Perl Tkx, Jaka jest różnica między "button" i "ttk__button"?

Do tej pory jedyną różnicą, jaką odkryłem, jest to, że funkcja button wydaje się wyśrodkowywać tekst, podczas gdy funkcja ttk__button wydaje się pozostawić do justowania tekstu.


Przykład wykorzystania 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() 

Ten scenariusz będzie koncentrować tekst:

Centered text


przykład za pomocą ttk__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_ttk__button(
    -text => $text, 
    -command => sub { exit; }, 
); 
$b->g_grid; 

Tkx::MainLoop() 

Ten skrypt lewo uzasadnić tekst:

Left justified text


Zastanawiałem się, jakie inne różnice istnieją między tymi dwoma funkcjami i czy jest jakiś szczególny powód, istnieją dwie odrębne funkcje stwórz przyciski. Czy jedno z nich jest zazwyczaj lepsze niż inne?

Czy istnieje również sposób na wyśrodkowanie tekstu za pomocą funkcji ttk__button?

EDIT:

dodałem "Tcl" tag w tym od Perl TKX jest zasadniczo zbudowane off Tcl. Jestem całkiem niezły z Perlem, ale jestem trochę początkującym, jeśli chodzi o Tcl.

Chociaż na pierwszy rzut oka może się to wydawać, to jest to raczej pytanie Tcl niż pytanie w języku Perl, więc chciałbym usłyszeć odpowiedź od kogoś, kto ma doświadczenie z Tcl.


UWAGA:

Aby wyśrodkować tekst w ttk__button dodać następującą linię do kodu:

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

Odpowiedz

5

Button jest jednym z, powiedzmy, 'tradycyjny' widżety. Rodzina widżetów z rodziny ttk jest bardziej nowoczesna i została zaprojektowana tak, aby zwracać uwagę na konfigurację wyświetlania systemu hosta. Jeśli chcesz, aby aplikacja łączyła się z wybranym przez Ciebie "motywem", użyj widżetów ttk. Z drugiej strony, jeśli lubisz robić dużo pracy, aby dopasować się, lub chciałbyś, aby twoja aplikacja wystała jak bolesny kciuk, to za wszelką cenę używaj "tradycyjnych" widżetów.

Lepsze sterowanie widżetami ttk można wywierać za pomocą opcji -style.Możesz zajrzeć na stronę samouczka: @http://www.tkdocs.com/tutorial/styles.html.

Co ważne, przyciski nie zawierają często tekstu wielowierszowego. Są też inne widżety zaprojektowane z myślą o układzie tekstu.

EDIT:

Od komentarzu tjwrona1992 za: Tkx::ttk__style_configure('TButton', -justify => 'center');

+0

Okay, właśnie to zastanawiałem się, ale czy istnieje sposób na wyśrodkowanie tekstu na przycisku "ttk"? Kiedy używam wielu linii tekstu i wyrównuje to wszystko w lewo wygląda brzydko. – tjwrona1992

+0

Osobiście przebadałbym projekt, który umieszcza tekst wieloliniowy w przycisku. Lepszą kontrolę widżetów 'ttk' można wywierać za pomocą atrybutu' -style'. – tjd

+0

Cóż, mam przycisk, który musi zmieścić się na stosunkowo małej przestrzeni. Nawet gdyby miał swój własny sposób na zawijanie tekstu, który byłby użyteczny. Teraz, jeśli nie użyję "\ n", aby przekroczyć wiele linii, umieści to wszystko w jednej linii i rozciągnie ekran tak, aby pasował do niego, co również nie wygląda zbyt dobrze. – tjwrona1992

2

Tk ma dwie klasy widżetów: tradycyjna i tiled. Tradycyjne widżety to te, które istnieją od początku powstania Tk. Widgety kaflowe są stosunkowo nowe. Emulują natywne widżety dzięki obsłudze motywów. Wiele (ale nie wszystkie) widżety są dostępne w obu formach. Tile rozpoczęło się jako osobna biblioteka, zanim została zintegrowana z Tk 8.5 jako Ttk.

Niestety, przejście od tradycyjnych do kafelkowych widżetów Tk nie jest tak proste, jak dodanie instrukcji "use ttk", ponieważ widżety tradycyjne i kafelkowe nie muszą mieć tego samego zestawu opcji konfiguracyjnych.

W języku Tkx przedrostek ttk służy do określania kafelkowej wersji widgetu. Wiki Tcl Tk ma comparison widżetów ttk przy użyciu różnych motywów. ("Klasyczny" motyw dopasowuje wygląd & dotyk tradycyjnego Tk.) Oto jak button i ttk__button render na moim systemie (Win7):

button vs ttk button

tradycyjne wzory są bardziej elastyczne. Możesz skonfigurować więcej atrybutów i zrobić to na podstawie widgetu. Widżety kaflowe wyglądają lepiej (np. Natywne) i ułatwiają zmianę ogólnego wyglądu aplikacji.

Osobiście zawsze używam widżetów ttk, gdy są dostępne.

Powiązane problemy