gui для скриптов



  • пока разработчики разрабатывают, а gui захотелось.
    хотел конечно собрать годный шаблон чтобы любой дятел мог настроить сменяя переменные в шапке, но мне недасук.
    это набросок загрузчика, который принимает данные от пользователя и хранит их(данные) между запусками в файле в JSON. тот же файл с JSON я предлагаю использовать в качестве ресурса.
    извините perl\Tkx\TCL.
    так вышло, оказывается в стандартной поставке перл больше нет модуля Tk или он где-то глубже. Можно конечно "чтото".Net чтобы потом выяснять какие редистрибутэблы качать, но perl+perl2exe удобнее и не так уж и много ресурсов, можно померятся, не то чтобы у меня меньше...

    что можно: картинки и таблички, фоны и шрифты, комбо- чек- радио- и прочие бутомы, программировать поведение в зависимости от чевони-будь, заголовки и надписи, меню и модальные окна, всяческие рамочки и прочие свистоперделки(я не останавливаюсь), табов настоящих вроде нет, но я поделку вроде получилось намутить чтобы и чтото на них похожее было, для интерфейса вполне хватит.

    итак вот демонстрационный файлархив на файлообменниек, ибоне лезет(половина метра, что неплохооколо 8 метров, что хуже) и код скрипта, зауск и жестокое убийство БАСа закоментировано
    Уже это можно поправить, поразбираться придется, но можно считать что это защита от скрипткиди.

    #!perl
    use strict;
    #use LWP;
    use Tkx;
    use JSON;
    #our $VERSION = "1.00";
    our $PROGRAMM_NAME = "PROGRAMM NAME";
    our $FRAME1 = "FRAME 1 NAME";
    our $FRAME2 = "FRAME 2 NAME";
    our $FRAME3 = "FRAME 3 NAME";
    our $FRAME4 = "FRAME 4 NAME";
    our $FRAME5 = "FRAME 5 NAME";
    main();
    
    sub main() {
    	my %settings = &loadSettings();
    	my $mw = Tkx::widget->new( "." );
    	$mw->g_wm_title($PROGRAMM_NAME);
    	$mw->g_wm_minsize(500, 350);
    		my $hFrame = $mw->new_labelframe( -text => $FRAME1 );
    		$hFrame->g_pack( -side => "top" );
    		my $name = 'name1';
    			my $lFrame = $hFrame->new_frame();
    			$lFrame->g_pack( -side => "top" );
    				my $label = $lFrame->new_label(
    					-text => 'addr: ',
    					-justify => 'left',
    				);
    				$label->g_pack( -side => "left" );
    				my$val1 = $lFrame->new_entry(
    					-textvariable => \$settings{$name}{'name'},
    					-justify => 'center',
    				);
    				$val1->g_pack( -side => "left" );
    			my $lFrame = $hFrame->new_frame();
    			$lFrame->g_pack( -side => "top" );
    				my $label = $lFrame->new_label(
    					-text => 'pass: ',
    					-justify => 'left',
    				);
    				$label->g_pack( -side => "left" );
    				my$val2 = $lFrame->new_entry(
    					-textvariable => \$settings{$name}{'pass'},
    					-justify => 'center',
    				);
    				$val2->g_pack( -side => "left" );
    		my $hFrame = $mw->new_labelframe( -text => $FRAME2 );
    		$hFrame->g_pack( -side => "top" );
    		$name = 'name2';
    			my $lFrame = $hFrame->new_frame();
    			$lFrame->g_pack( -side => "top" );
    				my $label = $lFrame->new_label(
    					-text => 'addr: ',
    					-justify => 'left',
    				);
    				$label->g_pack( -side => "left" );
    				my$val3 = $lFrame->new_entry(
    					-textvariable => \$settings{$name}{'name'},
    					-justify => 'center',
    				);
    				$val3->g_pack( -side => "left" );
    			my $lFrame = $hFrame->new_frame();
    			$lFrame->g_pack( -side => "top" );
    				my $label = $lFrame->new_label(
    					-text => 'pass: ',
    					-justify => 'left',
    				);
    				$label->g_pack( -side => "left" );
    				my$val4 = $lFrame->new_entry(
    					-textvariable => \$settings{$name}{'pass'},
    					-justify => 'center',
    				);
    				$val4->g_pack( -side => "left" );
    		my $hFrame = $mw->new_labelframe( -text => $FRAME3 );
    		$hFrame->g_pack( -side => "top" );
    		$name = 'name3';
    			my $lFrame = $hFrame->new_frame();
    			$lFrame->g_pack( -side => "top" );
    				my $label = $lFrame->new_label(
    					-text => 'email: ',
    					-justify => 'left',
    				);
    				$label->g_pack( -side => "left" );
    				my$val5 = $lFrame->new_entry(
    					-textvariable => \$settings{$name}{'name'},
    					-justify => 'center',
    				);
    				$val5->g_pack( -side => "left" );
    			my $lFrame = $hFrame->new_frame();
    			$lFrame->g_pack( -side => "top" );
    				my $label = $lFrame->new_label(
    					-text => 'password: ',
    					-justify => 'left',
    				);
    				$label->g_pack( -side => "left" );
    				my$val6 = $lFrame->new_entry(
    					-textvariable => \$settings{$name}{'pass'},
    					-justify => 'center',
    				);
    				$val6->g_pack( -side => "left" );
    		my $hFrame = $mw->new_labelframe( -text => $FRAME4 );
    		$hFrame->g_pack( -side => "top" );
    		$name = 'name4';
    			my $lFrame = $hFrame->new_frame();
    			$lFrame->g_pack( -side => "top" );
    				my $label = $lFrame->new_label(
    					-text => 'Key: ',
    					-justify => 'left',
    				);
    				$label->g_pack( -side => "left" );
    				my $val7 = $lFrame->new_entry(
    					-textvariable => \$settings{$name}{'key'},
    					-justify => 'center',
    					-state => $settings{$name}{'checkbox'} == 0?'disabled':'normal',
    				);
    				$val7->g_pack( -side => "top" );
    			my $lFrame = $hFrame->new_frame();
    			$lFrame->g_pack( -side => "top" );
    				my $ch1 = $lFrame->new_checkbutton(
    					-text => "use checkbox",
    					-variable => \$settings{$name}{'checkbox'},
    					-command => sub{
    						if($settings{$name}{'checkbox'}){
    							$val7->configure( -state => 'normal' );
    						}else{
    							$val7->configure( -state => 'disabled' );
    							$settings{$name}{'key'} = '';
    						}
    					}
    				);
    				$ch1->g_pack( -side => "top" );
    		my $hFrame = $mw->new_labelframe( -text => $FRAME5 );
    		$hFrame->g_pack( -side => "top" );
    		$name = 'name5';
    			my $lFrame = $hFrame->new_frame();
    			$lFrame->g_pack( -side => "top" );
    				my $ch2 = $lFrame->new_checkbutton(
    					-text     => "use checkbox",
    					-variable => \$settings{$name}{'checkbox'},
    				);
    				$ch2->g_pack( -side => "top" );
    		$name = 'name4';
    		my $hFrame = $mw->new_frame();
    		$hFrame->g_pack( -side => "top" );
    			my $lFrame = $hFrame->new_frame();
    			$lFrame->g_pack( -side => "top" );
    				my $bStop;
    				my $bRun;
    				$bRun = $lFrame->new_button(
    					-text => "Run",
    					-command => sub{
    						$bStop->configure(-state => 'normal');
    						$bRun->configure(-state => 'disabled');
    						$val1->configure(-state => 'disabled');
    						$val2->configure(-state => 'disabled');
    						$val3->configure(-state => 'disabled');
    						$val4->configure(-state => 'disabled');
    						$val5->configure(-state => 'disabled');
    						$val6->configure(-state => 'disabled');
    						$val7->configure(-state => 'disabled');
    						$ch1->configure(-state => 'disabled');
    						$ch2->configure(-state => 'disabled');
    						&run(\%settings);
    					}
    				);
    					$bStop = $lFrame->new_button(
    					-text => "Stop",
    					-state => 'disabled',
    					-command => sub{
    						$bStop->configure(-state => 'disabled');
    						$bRun->configure(-state => 'normal');
    						$val1->configure(-state => 'normal');
    						$val2->configure(-state => 'normal');
    						$val3->configure(-state => 'normal');
    						$val4->configure(-state => 'normal');
    						$val5->configure(-state => 'normal');
    						$val6->configure(-state => 'normal');
    						if($settings{$name}{'checkbox'}){
    							$val7->configure( -state => 'normal' );
    						}
    						$ch1->configure(-state => 'normal');
    						$ch2->configure(-state => 'normal');
    					}
    				);
    				my $bExit = $lFrame->new_button(
    					-text => "Exit",
    					-command => sub{
    						$mw->g_destroy();
    #						exec 'taskkill', '/F /IM FastExecuteScript.exe';
    					}
    				);
    				$bRun->g_pack( -side => "left" );
    				$bStop->g_pack( -side => "left" );
    				$bExit->g_pack( -side => "left" );
    	Tkx::MainLoop();
    }
    sub run(){
    	my $json = $_[0];
    	mkdir "setting";
    	open(FILE, ">setting/sFile");
    	$json = encode_json($json);
    	print FILE $json;
    	close FILE;
    #	exec 'temp\engine\FastExecuteScript.exe', '--silent';
    }
    sub loadSettings(){
    	open(FILE, "<setting/sFile");
    	my @file = <FILE>;
    	my $str = $file[0];
    	my $json;
    	close FILE;
    	if($str){
    		$json = decode_json($str);
    	}else{
    		$json = {'name4' => {'checkbox' => 0}, 'name5' => {'checkbox' => 0}};
    	}
    	return %$json;
    }
    

    и да, пёрл вам не это



  • прдон собрал в минимальном режиме, недоложил окружения, у меня то работает, щас исправлюсь

    пример обновил, проверил на устройстве где никакого окружения точно нет, работает, но размер увеличился, но что во врямена высокоскоростного интернета несуйщественно.