Thread Tk: Document-View Architektur?: GUI Konzept... (18 answers)
Opened by BratHering at 2005-11-15 15:47

Strat
 2005-11-16 17:54
#44996 #44996
User since
2003-08-04
5246 articles
ModeratorIn
[Homepage] [default_avatar]
Das mit den Modulen hat normalerweise nichts speziell mit Tk zu tun (ausser du willst die schnittstellen eines widgets veraendern: Tk::Derived, oder neue widgets zusammensetzen: Tk::Composite), sondern verhaelt sich wie allgemeine Module
z.B.
./myProgram.pl
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
#! /usr/bin/perl
use warnings;
use strict;
use Tk;
use FindBin;
use lib $FindBin;
use MyApp::Widgets;

my $mw = MainWindow->new();
my $button = MyApp::Widgets::Button($mw, 'klick', sub { $mw->destroy() });
MainLoop();

(MainWindow->new vielleicht auch als Funktion auslagern, z.B. nach MyApp::Forms oder so)

./MyApp/Widgets.pm (das letzte hinter den :: ist der Dateiname ohne .pm)
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package MyApp::Widgets;
use warnings;
use strict;

use constant BACKGROUND_COLOR => '#bfdcc0'; # als konstante
our $StandardFont = 'Arial 12 normal'; # als "globale" variable
use vars qw($BoldFont); # ebenfalls "global"
$BoldFont = 'Arial 12 normal';
my $fixedFont = "Courier 12 normal"; # oder normale my-variable

sub Button {
my ($parent, $text, $callback, %options) = @_;
my %options2 = ();
if (defined $callback and ref $callback) {
$options2{-command} = $callback;
} # if
else {
$options2{-state} = 'disabled';
}
if (ref $text) {
$options2{-textvariable} = $text;
}
else {
$options2{-text} = $text;
}

return $parent->Button(
-background => BACKGROUND_COLOR,
-font => $StandardFont,
-paddx => 5, -pady => 4,
%options2, %options,
);
} # Button
# -----------------------------------------------------
sub Frame { ... }
#...

(nicht getestet)

Auf "globale" Variablen kann man auch ueber den voll qualifizierten Packagename zugreifen, z.B. $MyApp::Widgets::StandardFont oder $MyApp::Widgets::$BoldFont; sogar auf Konstanten geht es, allerdings nur ueber einen Umweg (konstanten sind ja in Perl Subroutinen): &MyApp::Widgets::BACKGROUND_COLOR
Auf die my-Variable $fixedFont kommst du allerdings nur aus dem Modul selbst dran (d.h. nur aus untergeordneten gueltigkeitsbereichen)\n\n

<!--EDIT|Strat|1132156692-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/

View full thread Tk: Document-View Architektur?: GUI Konzept...