Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > трабл с POE и Tk


Автор: KSURi 11.4.2007, 00:51
Вобщем есть примерно такой код:
Код

#!perl

use strict;
use warnings;

use Tk;
use Tk::ROText;
use Tk::Balloon;

use POE;

POE::Session->create(inline_states =>
                     {
                        _start => \&guiDrawMain,
                        poeDrawTools => \&guiDrawTools,
                        poeDrawWiFi  => \&guiDrawWiFi,
                        poeDrawSniff => \&guiDrawSniff,
                        poeDrawFlood => \&guiDrawFlood,
                        poeDrawAbout => \&guiDrawAbout,
                        _stop => sub { exit 0 }
                     });

sub guiDrawMain
{
   $poe_main_window->configure(-title => '...',
                               -background => '#1E303C');
   $poe_main_window->resizable(0, 0);
   
   $_[HEAP]->{oMain} = $poe_main_window->ROText(-height => 20,
                                                -width => 47,
                                                -foreground => '#FFFFFF',
                                                -background => '#354550',
                                                -font => '{Verdana} 9');

# Далее создаются другие элементы главного окна
    
    $_[HEAP]->{oMain}->grid(-column => 0,
                            -row => 0,
                            -pady => 3);

# Здесь расстановка этих элементов

    MainLoop;
}

$poe_kernel->run;

Скрипт запускается, работает ~1 секунду и завершается без ошибок. Есть только варнинг
Код

POE::Kernel's run() method was never called.

И это не смотря на $poe_kernel->run;...

кто-нить видит в чем трабл?

Автор: Nab 11.4.2007, 06:57
Не хочу врать, но я там везде встречал упоминание о том что с Tk надо работать по другому, так как в нем свой контроллер очереди сообщений, то для корректного использования, нужно использовать немного другие методы, почитайте документацию, там есть об этом...

Автор: KSURi 11.4.2007, 14:43
Именно с http://www.stonehenge.com/merlyn/PerlJournal/col11.html я и начинал)
Там-же есть сорец, весьма похожий на мой...

UPD:
http://poe.perl.org/?POE_Cookbook/Tk_Interfaces вот еще вспомнил

Автор: shamber 11.4.2007, 14:58
а не run() ?

PS ступил скорее всего звиняйте. smile

Автор: KSURi 11.4.2007, 15:03
Цитата(shamber @ 11.4.2007,  14:58)
а не run() ?

Не играет никакой роли. Просто при опускании скобок, парсер Perl, не тратит время на поиск аргументов для функции.

Автор: nitr 11.4.2007, 15:24
KSURi, проверил твой код и во FreeBSD и в WinXP, у меня запустился и работает, открыл так сказать "пустое" окошко. Да твой код по пое-кукбуку написан верно. Может попытаться пересобрать Tk и POE?


Цитата(KSURi @ 11.4.2007,  15:03)
Цитата(shamber @ 11.4.2007,  14:58)
а не run() ?

Не играет никакой роли. Просто при опускании скобок, парсер Perl, не тратит время на поиск аргументов для функции.

кроме того у нас перл, а не си.

Автор: nitr 12.4.2007, 10:52
Варнинги тоже не выводит... так что мне не удалось воссоздать ошибку.
Perl 5.8.x
POE и Tk со CPAN

Автор: KSURi 12.4.2007, 12:07
Только что заново стянул POE и кучу компонентов из PPM. Не помогло =\

Код

This is perl, v5.8.8 built for MSWin32-x86-multi-thread

POE и Тк из PPM

Автор: Nab 12.4.2007, 15:21
Цитата(KSURi @  12.4.2007,  12:07 Найти цитируемый пост)
POE и Тк из PPM

Думаю вот в этом и проблема, я тоже сначала оттуда брал, но уж слишком они старые, если Tk я не менял, то POE качнул со CPAN последнюю, там некоторые методы просто исчезли, а некоторые работают по другому...

У меня твой скрипт заработал нормально, показал дерьмового цвета окошко с заголовком ... smile
И жило, пока я кнопку закрыть не нажал smile

Версия файла POE.pm у меня 0.38...

Автор: KSURi 12.4.2007, 16:59
Чтож, после установки из CPAN, все действительно сразу заработало.
Спасибо всем, кто откликнулся.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)