ph1l1ster
26.03.2009, 02:46
# intro #
Не где не видел мануала на русском, поэтому решил написать. Многие знают что посредстами перла можно создавать GUI интерфейсы. И сейчас я вам об этом немного расскажу приведя в пример простенький текстовый редактор.
# Hello, World! #
У кого не установлена библиотека Tk установите её:
cpan> install Tk
или под active perl windows:
\perl\bin\ppm -> продукт Tk
Поехали дальше.
По старинке 'Hello, world!' :)
загружаем:
use Tk;
Создаём интерфейс для будущей программы:
$first = MainWindow->new(-title=>"Hello, all!");
$first->geometry("200x65");
MainWindow->new - саздаём новое окно.
-title=>"Hello, all!" - как думаю уже догадались, это титл окна.
geometry("200x65") - размеры окна.
$first -> Label(-text=>"Enter you name:") -> pack();
$first -> Entry(-textvariable=>\$name ) -> pack();
Label(-text=>"Enter you name:") - обычный Lable с надписью Enter you name:
$first -> Entry - это уже изменяемый label, тоесть сюда мы можем записать, удалить вырезать и тд.
-textvariable=>\$name - опция textvariable даёт понять, что нужно записать введённые символы в переменную $name
Далее, создаём кнопку. с параметрами:
-text=>"Enter" - надпись на кнопке
-height=>1 - ширина
-width=>15 - длинна
-сommand =>\&hello - при нажатие на кнопку, выполняется подпрограмма hello
$first -> Button(-text=>"Enter",-height=>1,-width=>15, -сommand =>\&hello) -> pack();
Вот. пол дела уже сделано, далее создадим подпрограмму hello
$second = MainWindow->new(-title=>"Hello, all");
$second->geometry("200x20");
$second -> Label(-text=>"Hello, $name!") -> pack();
Все строчки думаю понятны. в 3 строчке выводит в Label то, что мы ввели в Enter you name: + Hello.
обязательно заканчиваем всё это:
MainLoop;
И в итоге мы получаем, вот такую мега супер прогу:
http://i009.radikal.ru/0903/8c/ebb13ed48b84.jpg
#!/usr/bin/perl
use Tk;
$first = MainWindow->new(-title=>"Hello, all!");
$first->geometry("200x65");
$first -> Label(-text=>"Enter you name:") -> pack();
$first -> Entry(-textvariable=>\$name) -> pack();
$first -> Button(
-text=>"Enter",
-height=>1,
-width=>15,
-command =>\&hello) -> pack();
sub hello{
$second = MainWindow->new(-title=>"Hello, all");
$second->geometry("200x20");
$second -> Label(-text=>"Hello, $name!") -> pack();
}
MainLoop;
# Text Editor #
Ну пожалуй и сделаем самый простенький текстовый редактор.
самое главное:
use Tk; # ноу комментс
$form = MainWindow->new(-title=>"Text Editor! (c) ph1l1ster"); # главное окно
$form->geometry("800x600"); # размеры
$form->resizable(0,0);# чтобы никто окно не шевелил ;)
$form->resizable(0,0); - 0 - и окно не подвижно, то есть, изменять размеры нельзя.
Если это текстовый редактор, естественно нужен скроулинг?)
Поэтому создаём форму ввода вместе со скроулом:
$txt = $form -> Scrolled('Text',-width => 111, -height=>50,,-scrollbars=>'e') -> pack ();
Чтобы редактор был полноценным. прикрутим выпадающее меня сверху.
меняшки сделаем такие:
File: New,Open,Save.Exit
Help: About
# выпадающее меню
$bar_menu = $form -> Menu();
$form -> configure(-menu => $bar_menu);
$file = $bar_menu -> cascade(-label=>"File", -underline=>0, -tearoff => 0);# первая кнопка
$help = $bar_menu -> cascade(-label =>"Help", -underline=>0, -tearoff => 0);# вторая кнопка
$file -> command(-label => "New", -underline=>0, -command=>sub { $txt -> delete('1.0','end');} ); # меню в первой кнопе - создать новое
$file -> command(-label =>"Open", -underline => 0, -command => [\&open, "Open"]);# меню в первой кнопе - открыть
$file -> command(-label =>"Save", -underline => 0, -command => [\&save, "Save"]);# меню в первой кнопе - сохранить
$file_types = [ ['Text Files', '.txt'], ['All Files', '*'],];# типы файлов
$file -> separator();# разделитель
$file -> command(-label =>"Exit", -underline => 1,-command => sub { exit } ); # меню в первой кнопе - выход
Сначала создаюм основное меню:
$file = $bar_menu -> cascade
$help = $bar_menu -> cascade
и подменю:
$file -> command - для каждого, у нас - New, Open, Save.Exit
опцией -command задаём комманду после нажатия
опция -underline отвечает за подчёркивание снизу, без него лучше, поэтому = 0
Далее определим какие типы файлов мы будет сохранять\открывать:
$file_types = [ ['Text Files', '.txt'], ['All Files', '*'],];
Текстовые и любые, соответственно.
Ну а теперь приступим к назачению комманд кнопкам.
Для начала создадим новый документ. для етого тупо очистим форму:
$txt -> delete('1.0','end');
Вот и все :)
Давай теперь попробуем открыть файл, за это отвечает функция getOpenFile
Чтобы незасорять код создадим попрограмму open
-command => [\&open, "Open"]
и комманда:
sub open {
$open = $form->getOpenFile(-filetypes => $file_types, -defaultextension => '.txt');}
Сохранить, функция getSaveFile
-command => [\&save, "Save"]
и комманда:
sub save {
$save = $form->getSaveFile(-filetypes => $file_types, -initialfile => 'test', -defaultextension => '.txt');}
Exit:
проще ничего нет :)
-command => sub { exit }
ну а теперь самое главное, для чего и пишутся проги, это About :)
Кликом на кнопку тупо открывать другое окно:
$ab = MainWindow->new(-title=>"Text Editor! (c) ph1l1ster # About");
$ab->geometry("320x150");
$ab->resizable(0,0);
$ab -> Label(
-text=>"Hello! ;)
This is you first GUI programm on perl :)
This is very easy.
Respect all whack members.
(c) ph1l1ster | special from all")
Думаю тут всё понятно.
Ну вот и всё, мы подошли к концу.
плучилось так вот:
http://s59.radikal.ru/i166/0903/c5/a11c430562e8.jpg
# The End #
Ну вот я расскозал немного основ. Это хоть и самая малость, но банально задавать команды для нажатий кнопок и писать в форме вы уже научились.
По мере узноваимости буду дополнять, а сейчас всё :)
Не где не видел мануала на русском, поэтому решил написать. Многие знают что посредстами перла можно создавать GUI интерфейсы. И сейчас я вам об этом немного расскажу приведя в пример простенький текстовый редактор.
# Hello, World! #
У кого не установлена библиотека Tk установите её:
cpan> install Tk
или под active perl windows:
\perl\bin\ppm -> продукт Tk
Поехали дальше.
По старинке 'Hello, world!' :)
загружаем:
use Tk;
Создаём интерфейс для будущей программы:
$first = MainWindow->new(-title=>"Hello, all!");
$first->geometry("200x65");
MainWindow->new - саздаём новое окно.
-title=>"Hello, all!" - как думаю уже догадались, это титл окна.
geometry("200x65") - размеры окна.
$first -> Label(-text=>"Enter you name:") -> pack();
$first -> Entry(-textvariable=>\$name ) -> pack();
Label(-text=>"Enter you name:") - обычный Lable с надписью Enter you name:
$first -> Entry - это уже изменяемый label, тоесть сюда мы можем записать, удалить вырезать и тд.
-textvariable=>\$name - опция textvariable даёт понять, что нужно записать введённые символы в переменную $name
Далее, создаём кнопку. с параметрами:
-text=>"Enter" - надпись на кнопке
-height=>1 - ширина
-width=>15 - длинна
-сommand =>\&hello - при нажатие на кнопку, выполняется подпрограмма hello
$first -> Button(-text=>"Enter",-height=>1,-width=>15, -сommand =>\&hello) -> pack();
Вот. пол дела уже сделано, далее создадим подпрограмму hello
$second = MainWindow->new(-title=>"Hello, all");
$second->geometry("200x20");
$second -> Label(-text=>"Hello, $name!") -> pack();
Все строчки думаю понятны. в 3 строчке выводит в Label то, что мы ввели в Enter you name: + Hello.
обязательно заканчиваем всё это:
MainLoop;
И в итоге мы получаем, вот такую мега супер прогу:
http://i009.radikal.ru/0903/8c/ebb13ed48b84.jpg
#!/usr/bin/perl
use Tk;
$first = MainWindow->new(-title=>"Hello, all!");
$first->geometry("200x65");
$first -> Label(-text=>"Enter you name:") -> pack();
$first -> Entry(-textvariable=>\$name) -> pack();
$first -> Button(
-text=>"Enter",
-height=>1,
-width=>15,
-command =>\&hello) -> pack();
sub hello{
$second = MainWindow->new(-title=>"Hello, all");
$second->geometry("200x20");
$second -> Label(-text=>"Hello, $name!") -> pack();
}
MainLoop;
# Text Editor #
Ну пожалуй и сделаем самый простенький текстовый редактор.
самое главное:
use Tk; # ноу комментс
$form = MainWindow->new(-title=>"Text Editor! (c) ph1l1ster"); # главное окно
$form->geometry("800x600"); # размеры
$form->resizable(0,0);# чтобы никто окно не шевелил ;)
$form->resizable(0,0); - 0 - и окно не подвижно, то есть, изменять размеры нельзя.
Если это текстовый редактор, естественно нужен скроулинг?)
Поэтому создаём форму ввода вместе со скроулом:
$txt = $form -> Scrolled('Text',-width => 111, -height=>50,,-scrollbars=>'e') -> pack ();
Чтобы редактор был полноценным. прикрутим выпадающее меня сверху.
меняшки сделаем такие:
File: New,Open,Save.Exit
Help: About
# выпадающее меню
$bar_menu = $form -> Menu();
$form -> configure(-menu => $bar_menu);
$file = $bar_menu -> cascade(-label=>"File", -underline=>0, -tearoff => 0);# первая кнопка
$help = $bar_menu -> cascade(-label =>"Help", -underline=>0, -tearoff => 0);# вторая кнопка
$file -> command(-label => "New", -underline=>0, -command=>sub { $txt -> delete('1.0','end');} ); # меню в первой кнопе - создать новое
$file -> command(-label =>"Open", -underline => 0, -command => [\&open, "Open"]);# меню в первой кнопе - открыть
$file -> command(-label =>"Save", -underline => 0, -command => [\&save, "Save"]);# меню в первой кнопе - сохранить
$file_types = [ ['Text Files', '.txt'], ['All Files', '*'],];# типы файлов
$file -> separator();# разделитель
$file -> command(-label =>"Exit", -underline => 1,-command => sub { exit } ); # меню в первой кнопе - выход
Сначала создаюм основное меню:
$file = $bar_menu -> cascade
$help = $bar_menu -> cascade
и подменю:
$file -> command - для каждого, у нас - New, Open, Save.Exit
опцией -command задаём комманду после нажатия
опция -underline отвечает за подчёркивание снизу, без него лучше, поэтому = 0
Далее определим какие типы файлов мы будет сохранять\открывать:
$file_types = [ ['Text Files', '.txt'], ['All Files', '*'],];
Текстовые и любые, соответственно.
Ну а теперь приступим к назачению комманд кнопкам.
Для начала создадим новый документ. для етого тупо очистим форму:
$txt -> delete('1.0','end');
Вот и все :)
Давай теперь попробуем открыть файл, за это отвечает функция getOpenFile
Чтобы незасорять код создадим попрограмму open
-command => [\&open, "Open"]
и комманда:
sub open {
$open = $form->getOpenFile(-filetypes => $file_types, -defaultextension => '.txt');}
Сохранить, функция getSaveFile
-command => [\&save, "Save"]
и комманда:
sub save {
$save = $form->getSaveFile(-filetypes => $file_types, -initialfile => 'test', -defaultextension => '.txt');}
Exit:
проще ничего нет :)
-command => sub { exit }
ну а теперь самое главное, для чего и пишутся проги, это About :)
Кликом на кнопку тупо открывать другое окно:
$ab = MainWindow->new(-title=>"Text Editor! (c) ph1l1ster # About");
$ab->geometry("320x150");
$ab->resizable(0,0);
$ab -> Label(
-text=>"Hello! ;)
This is you first GUI programm on perl :)
This is very easy.
Respect all whack members.
(c) ph1l1ster | special from all")
Думаю тут всё понятно.
Ну вот и всё, мы подошли к концу.
плучилось так вот:
http://s59.radikal.ru/i166/0903/c5/a11c430562e8.jpg
# The End #
Ну вот я расскозал немного основ. Это хоть и самая малость, но банально задавать команды для нажатий кнопок и писать в форме вы уже научились.
По мере узноваимости буду дополнять, а сейчас всё :)