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;
    }
    

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



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

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


Log in to reply
 

Looks like your connection to Bablosoft was lost, please wait while we try to reconnect.