在perl tk中创建水印

时间:2010-11-03 10:36:57

标签: perl tk

我有一个Perl-Tk代码,该代码创建了一个带有5个Tabs的GUI。我的要求是我需要插入一个应该是水印图像的图像(徽标),它应该包含在所有5个标签中。我在互联网上搜索,没有这样的方式。

有人知道吗?

代码如下。

#!/usr/bin/perl

use Tk;
use strict;
use warnings;
use Tk::NoteBook;
use Tk::TextUndo;
use XML::Simple;
use IO::Socket::INET;

# ===================variables==================
my $fname;
my $open_fname;
my $f;
my $info;
my $t;
# my $load_file_variable;
my $types;
my $menubar;
my @path;
my $parser_path;
my $log_filename;
my $dut_conf_filename;
my $w;
my %info;
my @key;
my $sub_routine_flg = 0;
# ==============================================

$log_filename = '/home/SaLTT/Log/log.txt';
$dut_conf_filename = '/home/SaLTT/Log/dut_configuration.txt';

my $filename = '/home/sait11/Desktop/Examples/test.txt';
# print "\tfilename***$filename\n\n";

my $mw = MainWindow->new;
    $mw->optionAdd("*font", "-*-arial-normal-r-*-*-*-120-*-*-*-*-*-*");
    $mw->optionAdd("*borderWidth", 3);
    $mw->geometry("1250x1250");
    $mw->title('SaLTT');

# ===================Adding Logo==================
    my $image = '/home/SaLTT/images/SAI_logo.gif';    # 32x32 GIF or BMP
    my $icon = $mw->Photo(-file => $image);
    $mw->iconimage($icon);
# ==============================================
    $menubar = $mw->Menu(-type => 'menubar');
    $mw->configure(-menu => $menubar);

####### Menus #######

    my $mfile = $menubar->cascade(-label => '~File', -tearoff => 0);    #   File_Menu
    my $mview = $menubar->cascade(-label => '~View', -tearoff => 0);    #   View_Menu  
    my $medit = $menubar->cascade(-label => '~Edit', -tearoff => 0);    #   Edit_Menu
    my $mhelp = $menubar->cascade(-label => '~Help', -tearoff => 0);    #   Help_Menu

# ==================== File ====================
    $mfile->command(    -label => '~Open',
                        -accelerator => 'Control+o',
                        -command => \&open_file
                    );
    $mfile->command(    -label => '~Save',
                        -accelerator => 'Control+s',
                        -command => \&save_log_file
                    );

# ==================== Edit ====================
    $medit->command(    -label => '~Edit',
                        -accelerator => 'Control+e',
                        -command => \&edit_file
                    );

# *************************************************
my $nb = $mw->NoteBook( )->pack( -expand => 1,
                                 -fill => 'both'
                                );
#=====================================================
# Page 1 on the notebook, with button on that page
#               DUT_Configuration
#=====================================================
my $tab1 = $nb->add('page1', -label => 'DUT_Configuration');
    $f = $tab1->Frame->pack(-side => 'bottom');
    $t = $tab1->Scrolled("TextUndo",-width => 600,-height => 400, -scrollbars => 'osoe')->pack(-side=>"right",
                                                                                               -expand => "yes",
                                                                                               -fill => "y"
                                                                                               );

    foreach (qw/IP_ADDRESS_SS PORT_NUMBER_CLIENT PROTOCOL_CLIENT/)
    {
        $w = $t->Label(-text => "$_:", -relief => 'groove', -width => 25);
        $t->windowCreate('end', -window => $w);
        $w = $t->Entry(-width => 20, -textvariable => \$info{$_})->pack();
        $t->windowCreate('end', -window => $w);
        $t->insert('end', "\n");
    }

    $f->Button(-text => 'Exit!',-activebackground=>"red", -command=>sub{exit})->pack( -side=>'right',
                                                                                     -anchor=>'se',
                                                                                     -ipadx => 10, -ipady => 10
                                                                                   );
    $f->Button(-text => 'Save',-activebackground=>"green", -command=>\&print_dut_rec)->pack( -side=>'right',
                                                                                      -anchor=>'se',
                                                                                      -ipadx => 10, -ipady => 10
                                                                                    );
    my $clear_text = $f->Button(-text => "Clear Text",-command => \&clear_entry)->pack(-side => 'right',
                                                                                      -anchor=>'se',
                                                                                      -ipadx => 10, -ipady => 10
                                                                                      );
#=====================================================
# Empty page 2
# SS_Configuration
#=====================================================
my $tab2 = $nb->add('page2', -label => 'SS_Configuration');
$tab2->Button(-text => 'Exit!',-activebackground=>"red", -command=>sub{exit})->pack(  -side=>'bottom',
                                                            -anchor=>'se',
                                                            -ipadx => 10, -ipady => 10
                                                          );
#=====================================================
# Empty page 3
# TC_Manager
#=====================================================
my $tab3 = $nb->add('page3', -label=>'TC_Manager');
$tab3->Button(-text=>"Test-UE", -command =>\&exec_parser)->grid(  $tab3->Button(-text=>"Test-eNB", -command=>sub{exit}),
$tab3->Button(-text=>"Exit!",-activebackground=>"red",-activebackground=>"red",-command=>sub{exit}),
                                                                 "-", "-",
                                                                -sticky=>'e',
                                                                -ipadx=>25, -ipady=>25,
                                                                -padx=>50, -pady=>50
                                                            );
#=====================================================
# Empty page 4
# TG_Configuration
#=====================================================
my $tab4 = $nb->add('page4', -label=>"TG_Configuration");

$tab4->Button(-text=>"SAITG",-command=>sub{exit})->grid($tab4->Button(-text=>"SmartBit",-command=>sub{exit}),
                                                        $tab4->Button(-text=>"Iperf",-command=>sub{exit}),
                                                        -sticky=>'nsew',
                                                        -ipadx=>25, -ipady=>25,
                                                        -padx=>50, -pady=>50,
                                                       );
#=====================================================
# Empty page 5
# Log Monitor
#=====================================================
my $tab5 = $nb->add("page5", -label=>"Log Monitor");

    $f = $tab5->Frame->pack(-side => 'top', -fill => 'x');

    $tab5->Button(-text => "Exit",-activebackground=>"red",-command => sub { exit; } )->pack(-side => 'bottom',-anchor=>'se',-ipadx=>10, -ipady=>10);
    $tab5->Button(-text => "Save",-activebackground=>"green",-command => \&save_log_file)->pack(-side => 'right',-anchor => 'ne',-ipadx=>10, -ipady=>10);
    $tab5->Button(-text => "Load", -command => \&load_log_file)->pack(-side => 'right', -anchor => 'ne',-ipadx=>10, -ipady=>10);
        $tab5->repeat(1000,\&load_log_file);

#   Create necessary widgets
    $tab5->Label(-textvariable => \$info, -relief => 'ridge')->pack(-side => 'bottom', -fill => 'x');
    $t = $tab5->Scrolled("Text",-scrollbars=>"w",-exportselection => 1)->pack(-side => 'bottom',-fill => 'both', -expand => 1,);

#=====================================================
# Empty page 6
# TC_Result
#=====================================================
    my $tab6 = $nb->add("page6", -label=>"TC_Result");

    $tab6->Button(-text=>"Report - Excel_sheet", -command=>\&report_spread_sheet)->pack( -side=>'top',
                                                                                         -anchor=>'center',
                                                                                         -ipadx => 50, -ipady => 25,
                                                                                         -padx=>500, -pady=>75
                                                                                       );

    $tab6->Button(-text=>"Report - HTML_sheet", -command=>\&report_html_sheet)->pack(   -side=>'top',
                                                                                        -anchor=>'center',
                                                                                        -ipadx => 50, -ipady => 25,
                                                                                        -padx=>500, -pady=>50
                                                                                    );

    $tab6->Button(-text=>"Exit!",-activebackground=>"red", -command=>sub{exit})->pack(  -side=>'bottom',
                                                                                        -anchor=>'se',
                                                                                        -ipadx => 10, -ipady => 10
                                                                                     );
#=====================================================
#   Empty page 7
#   TTCN-3 
#=====================================================
    my $tab7 = $nb->add("page7", -label=>"TTCN-3");
    $tab7->Button(-text=>"Exit!",-activebackground=>"red", -command=>sub{exit})->pack(  -side=>'bottom',
                                                                                        -anchor=>'se',
                                                                                        -ipadx => 10, -ipady => 10
                                                                                     );
# ================================
    $mw->bind('<Control-o>', [\&open_file]);
    $mw->bind('<Control-s>', [\&save_file]);
    $mw->bind('<Control-e>', [\&edit_file]);


    $types = [ ['XML Files',   '.xml'],
                  ['Perl files', '.pl'],
                  ['Text Files',   '.txt'],
                  ['All Files',   '*'],
                ];

MainLoop;

# ================================================
# $fname;                     #Fetch the selected test case file name
# =========================================================
# sub clear_entry
# {
#    $w->delete('0.0', 'end');
# }
# # =========================================================
sub open_file
{
  $open_fname = $mw->getOpenFile(-filetypes => $types,
                                    -defaultextension => '.xml'
                                   );
    if($open_fname)
    {
#         print qq{You chose to open "$open_fname"\n};
        my @ref = split(/\//,$open_fname);
        $fname = $ref[$#ref];
#         print "From open.pl ::: $fname\n";
    }
    else
    {
        print"Please select the test case file!!!\n";
        exit;
    }
}
# =========================================================
sub exec_parser
{
if (!$sub_routine_flg)
{
#   print "\n\nIn if condition of open.pl....having name in fname::$fname\n\n";
    &xml_parser_execution($fname);
    $sub_routine_flg = 1;
    undef $fname;
#   print "\tIn if part\n\n";
    print "\n\t***** Execution Completed.... Please Select test case from data base ***** ....\n\n";
}
else
{
# #     undef $fname;
#   print "fname in else part in open.pl:: $fname\n";
#   print "\n\n\tsubroutine flag is set in open.pl\n\n";
    &xml_parser_execution($fname);
    undef $fname;
#   print "\tIn else part\n\n";
    print "\n\t***** Execution Completed.... Please Select test case from data base ***** ....\n\n";
}
}
# =========================================================
#### ==Subroutine for log ==####
# load_file :- checks to see what the filename is and loads it if possible
sub load_log_file
{
    $info = "Loading file '$log_filename' ...";
    $t->delete("1.0", "end");
    if (!open(FH, "$log_filename"))
    {
    $t->insert("end", "ERROR: Could not open $log_filename\n");
    return;
    }
    while (<FH>) { $t->insert("end", $_); }
    close (FH);
    $info = "File '$filename' loaded";
}

# save_file :- saves the file using the filename in the entry box.
sub save_log_file
{
    $info = "Saving '$log_filename'";
    open (FH, ">$log_filename");
    print FH $t->get("1.0", "end");
    $info = "Saved...";
}
# =========================================================
sub save_dut_config_file
{
    $info = "Saving '$filename'";
    open (FH, ">$filename");
    print FH $t->get("1.0", "end");
    $info = "Saved.";
}
# =========================================================
sub print_dut_rec()
{
    open (FH, ">/home/SaLTT/DUT_Config.txt")||die" Not able to open DUT_Config.txt file xxxxxxxxxxxxx....\n";
    @key = keys %info;
    foreach $_ (@key)
    {
    print FH "$_:    $info{$_}\n";
#     print "$_:   $info{$_}\n";
    }
}
# =================== Report subroutines ======================================
sub report_spread_sheet
{

}

sub report_html_sheet
{

}
# ========================================================= 

此代码非常适合创建GUI,我正在使用此代码执行某些操作。

2 个答案:

答案 0 :(得分:1)

您可以使用标签将水印放在框架中,然后在其上设置图像;就Tk中的结构行为而言,框架和标签的工作方式相同(即,两者都很乐意包含其他小部件,并且他们没有很多自己的行为来阻碍)。可能需要对配置进行一些修改以获得您正在寻找的内容(例如,消除边框),但这应该很容易实现。

如果您正在使用Ttk小部件,那么最好将自己的风格应用于第IIRC帧。即使在tkdocs tutorial的帮助下,风格创作仍然是一种黑色艺术。

答案 1 :(得分:0)

tk中的图像水印是不可能的。您可以使用-alpha值来生成tk windo transperant。而是使用已经处理过的图像。