2010-02-16 1 views
2

J'essaye de créer une interface graphique pour un programme de conversion. Je veux créer un cadre contenant le fichier journal, mais je ne peux pas l'obtenir. J'ai trouvé quelques codes pour faire défiler toute la fenêtre, mais ce n'est pas ce que je veux. Je veux juste faire défiler un cadre contenant une étiquette avec une variable de texte chainging.Comment puis-je faire défiler une seule image dans Perl Tk?

J'ai même essayé le code suivant:

$s = $parent->new_ttk__scrollbar(-orient => 'vertical', -command => [$frame, 'yview']); 
$frame->configure(-scrollcommand => [$s, 'set']); 

mais je reçois une erreur. Perl dit que scrollcommand n'est pas une commande reconnue.

J'ai posté un morceau de mon code sur pastebin: http://pastebin.com/d22e5b134

Répondre

2

widgets Frame ne sont pas scrollable (à savoir qu'ils ne prennent pas en charge les méthodes xview et yview). Utilisez un widget de texte au lieu d'une étiquette dans un cadre. Si vous êtes paresseux, utilisez Tkx::Scrolled pour le faire pour vous. Si vous utilisez une étiquette parce que vous voulez qu'elle soit en lecture seule, utilisez Tkx::ROText à la place. Et pendant que je fais la promotion de mes propres modules, utilisez Tkx::FindBar pour une interface de recherche agréable.

use strict; 
use warnings; 

use Tkx; 
use Tkx::FindBar; 
use Tkx::ROText; 
use Tkx::Scrolled; 

my $mw = Tkx::widget->new('.'); 

my $text = $mw->new_tkx_Scrolled('tkx_ROText', 
    -scrollbars => 'osoe', 
    -wrap  => 'none', 
); 

my $findbar = $mw->new_tkx_FindBar(-textwidget => $text); 

$findbar->add_bindings($mw, 
    '<Control-f>' => 'show', 
    '<Escape>'  => 'hide', 
    '<F3>'   => 'next', 
    '<Control-F3>' => 'previous', 
); 

$text->g_pack(-fill => 'both', -expand => 1); 

$findbar->g_pack(
    -after => $text, 
    -side => 'bottom', 
    -fill => 'x', 
); 

$findbar->hide(); 

open(my $fh, '<', __FILE__) or die; 
$text->insert('end', do { local $/; <$fh> }); 
close $fh; 

$mw->g_focus(); 
Tkx::MainLoop(); 
+0

Merci pour votre aide. Je ne connaissais pas les cadres où pas défilable. J'ai utilisé un widget de texte avec une fonction pour désactiver, reable et écrire à chaque fois que j'ai besoin. Je vais jeter un coup d'oeil à votre module pendant que je termine la partie la plus essentielle de mon interface graphique. Je vous remercie encore. Ciao – Sebapabst

Questions connexes