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; }
и да, пёрл вам не это
-
прдон собрал в минимальном режиме, недоложил окружения, у меня то работает, щас исправлюсь
пример обновил, проверил на устройстве где никакого окружения точно нет, работает, но размер увеличился, но что во врямена высокоскоростного интернета несуйщественно.