Модераторы: ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GUI WxWidgets 
:(
    Опции темы
DaemonSuw
Дата 24.10.2008, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 11.3.2008

Репутация: нет
Всего: 3



Добрый день подскажите пожалуйста может кто из присутствующих работал с Wx... мне нужно сделать на нем таблицу для вывода данных (модуль WX::Grid)

Вся загвоздка в 
Цитата

my $event_grid = Wx::GridEvent->new(-1, wxEVT_GRID_CELL_LEFT_DCLICK, $grid);
    EVT_GRID_CELL_LEFT_DCLICK
    (
   $grid, 
   sub 
  {
  print 'GetCol=',$event_grid->GetCol(),"\n";
  print 'GetRow=',$event_grid->GetRow(),"\n";
  } 
   );    


EVT_GRID_CELL_LEFT_DCLICK - это event по двойному клику на ячейку

Цитата

wxGridEvent::GetCol

int GetCol()

Column at which the event occurred.


не могу передать колонку и строку в event, что бы по двойному клику сделать более полный отчёт...
выводит GetCol=-1
выводит GetRow=-1

Примеров кода на wxperl в инете мало((((... есть сайтWxperl, там документация....

wxGrid
wxGridEvent


Код

use Wx qw(:everything);

package MyApp;
use strict;
use vars qw(@ISA);
@ISA = qw(Wx::App);

sub OnInit {
    my($this) = @_;
    my($frame,$grid) = MyFrame->new( undef, -1, "Image Test", [-1,-1], [800, 600]);
    $frame->CenterOnScreen;
    $frame->Show(1);
    $this->SetTopWindow($frame);
    return 1;
}

package MyFrame;
use strict;
use vars qw(@ISA);
@ISA = qw(Wx::Frame);

use Wx qw(:everything);
use Wx::Event qw(:everything);
use Wx::Grid qw(:everything);

Wx::InitAllImageHandlers();

sub new {
    my ($class) = shift;
    my ($this) = $class->SUPER::new( @_ );
    $this->{main_window} = $this;
    
    my $panel = Wx::Panel->new
                            (
                            $this,
                            -1,
                            [0, 0],
                            [800,600],
                            );
                                    
    my $menu = Wx::Menu->new();
    
   $menu->Append(1, "&Test Progress Dialog\tCtrl-T", "Display a test dialog");
   $menu->Append(2, "E&xit\tAlt-X", "Quit this program");
    
    my($menu_bar) = Wx::MenuBar->new();
   $menu_bar->Append($menu, "&Test");
   $this->SetMenuBar($menu_bar);
   
   
    my $button = Wx::Button->new
                                (
                                $panel,
                                10,
                                'button',
                                [500, 10],
                                [-1, -1],
                                );

    my $grid = Wx::Grid->new($panel, -1, [ 0 , 20 ], [ 380, 400 ]);
    $grid->CreateGrid(10,3);
    $grid->SetRowLabelSize(20);
    $grid->SetColLabelSize(20);
    $grid->SetColSize(1,200);
    $grid->EnableDragColSize(0);
    $grid->EnableDragRowSize(0);
    $grid->EnableDragGridSize(0);
    my $color_red = Wx::Colour->new(255,255,222);
    $grid->SetLabelBackgroundColour($color_red);
    $grid->SetColLabelValue(0, '№ заказа');
    $grid->SetColLabelValue(1, 'ФИО');
    $grid->SetColLabelValue(2, 'Статус');
    $grid->EnableEditing(0);
    

    my $event_grid = Wx::GridEvent->new(-1, wxEVT_GRID_CELL_LEFT_DCLICK, $grid);
    EVT_GRID_CELL_LEFT_DCLICK
    (
      $grid, 
      sub 
        {
        print 'GetCol=',$event_grid->GetCol(),"\n";
        print 'GetRow=',$event_grid->GetRow(),"\n";
        } 
      );    
    
    return ($this);
}

package main;
use Wx::Event qw(:everything);
use Wx::Grid;
my($app) = MyApp->new();
$app->MainLoop()



Это сообщение отредактировал(а) DaemonSuw - 24.10.2008, 15:55
PM MAIL ICQ   Вверх
shamber
Дата 24.10.2008, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: нет
Всего: 18



я работаю с WX
попробуйте так
Код

use Wx qw(:everything);

package MyApp;
use strict;
use vars qw(@ISA);
@ISA = qw(Wx::App);

sub OnInit {
    my($this) = @_;
    my($frame,$grid) = MyFrame->new( undef, -1, "Image Test", [-1,-1], [800, 600]);
    $frame->CenterOnScreen;
    $frame->Show(1);
    $this->SetTopWindow($frame);
    return 1;
}

package MyFrame;
use strict;
use vars qw(@ISA);
@ISA = qw(Wx::Frame);

use Wx qw(:everything);
use Wx::Event qw(:everything);
use Wx::Grid qw(:everything);

Wx::InitAllImageHandlers();

sub new {
    my ($class) = shift;
    my ($this) = $class->SUPER::new( @_ );
    $this->{main_window} = $this;
    
    my $panel = Wx::Panel->new
                            (
                            $this,
                            -1,
                            [0, 0],
                            [800,600],
                            );
                                    
    my $menu = Wx::Menu->new();
    
   $menu->Append(1, "&Test Progress Dialog\tCtrl-T", "Display a test dialog");
   $menu->Append(2, "E&xit\tAlt-X", "Quit this program");
    
    my($menu_bar) = Wx::MenuBar->new();
   $menu_bar->Append($menu, "&Test");
   $this->SetMenuBar($menu_bar);
   
   
    my $button = Wx::Button->new
                                (
                                $panel,
                                10,
                                'button',
                                [500, 10],
                                [-1, -1],
                                );

    my $grid = Wx::Grid->new($panel, -1, [ 0 , 20 ], [ 380, 400 ]);
    $grid->CreateGrid(10,3);
    $grid->SetRowLabelSize(20);
    $grid->SetColLabelSize(20);
    $grid->SetColSize(1,200);
    $grid->EnableDragColSize(0);
    $grid->EnableDragRowSize(0);
    $grid->EnableDragGridSize(0);
    my $color_red = Wx::Colour->new(255,255,222);
    $grid->SetLabelBackgroundColour($color_red);
    $grid->SetColLabelValue(0, '№ заказа');
    $grid->SetColLabelValue(1, 'ФИО');
    $grid->SetColLabelValue(2, 'Статус');
    $grid->EnableEditing(0);
    
    
    EVT_GRID_CELL_LEFT_DCLICK($this, \&lmb_click);
    
    return ($this);
}

sub lmb_click{
    my $self = shift;
    my $event = shift;
     print 'GetCol=',$event->GetCol(),"\n";
        print 'GetRow=',$event->GetRow(),"\n";
}
package main;
my($app) = MyApp->new();
$app->MainLoop()


Добавлено @ 20:09
у меня выдает правильные координаты

Добавлено @ 20:15
а на ваш пример ругается
Код

Bareword "wxEVT_GRID_CELL_LEFT_DCLICK" not allowed while "strict subs" in use at C:\Perl\!My\vingrad\wx.pl line 76.


Это сообщение отредактировал(а) shamber - 27.10.2008, 12:18
PM MAIL Jabber   Вверх
DaemonSuw
  Дата 24.10.2008, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 11.3.2008

Репутация: нет
Всего: 3



Спасибо, большое...  smile 
а как ваши впечатление о WxPerl, 
как вам функционал? хватает? 
Все ли работает, были ли какие трудности с ним? 
есть ли у этого генератора GUI альтернативы, ну кроме старого доброго Tk (язык только Perl)? ))))

PM MAIL ICQ   Вверх
shamber
Дата 27.10.2008, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: нет
Всего: 18



по пунктам
1. Пока меня Wx устраивает.
2. Вроде все что пробовал работает.
3. альтернативы есть
win32-Gui из названия понятно что это только под win.
есть еще perl-Qt им занимается vadiml
PM MAIL Jabber   Вверх
DaemonSuw
  Дата 27.10.2008, 19:26 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 11.3.2008

Репутация: нет
Всего: 3



shamber, вы не работали с буфером обмена в wx, а именно с модулями 
StreamBuffer 
или 
RichTextCtrl 
не могу их вообще найти в сборке WxPerl, они существуют для wxperl?
my $control = Wx::StreamBuffer->new(); и use StreamBuffer - пишет что не может найти файлы... устанавливаю модули с сайта wxperl в чем проблема? пробывал скомпилить их в ручную со спана, но не получилось это сделать под windows...
подскажите пожалуйста

Это сообщение отредактировал(а) DaemonSuw - 28.10.2008, 00:21
PM MAIL ICQ   Вверх
shamber
Дата 28.10.2008, 12:19 (ссылка) |  (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: нет
Всего: 18



Давайте начнем с того что вы скомпилите модуль?

1. Для этого качаете mingw и устанавливаете его. после установки вам нужно добавить его в PATH.
2. Cкачиваете dmake. Разархивируете его куда нибудь и добавляете эту папку в PATH

3.Скачиваете модуль ExtUtils-FakeConfig и устанавливаете его.
во время установки когда вы делаете makefile.pl он должен вам вывести
Checking if your kit is complete...
Looks good
Writing Makefile for ExtUtils::FakeConfig
Using: 'dmake'

если вместо dmake пишет nmake значит, что он его находит в path или вы не добавили в path dmake.
Далее
Код

dmake 
dmake install

После этого добавляем PERL5OPT=-MConfig_m.
4. Скачиваете последний стабильный релиз Wxwidgets отсюда Stable выбирайте какой вариант вам удобней инсталлер или zip архив.
 Я выбрал инсталлер. После этого приступаем к компиляции модуля. 
Для этого переходим в папку 
Код

cd [path to wx]\build\msw

и вводим 
Код

mingw32-make -f makefile.gcc SHARED=1 BUILD=release UNICODE=1

если нас интересует поддержка ЮНИКОД.
далее переходим в папку
Код

cd [path to wx]\contrib\build\stc\

и вводим 
Код

mingw32-make -f makefile.gcc SHARED=1 BUILD=release UNICODE=1

После выполения этих команд мы получаем необходимые нам dll.
После этого нам нужно в PATH добавить
  WXDIR=[path to wx]
  WXWIN=[path to wx]

5. Скачивате поcледний релиз Alien-wxWidgets.
Начинаем установку.
Код

perl Build.PL --unicode

на вопрос 
Код

Do you want to build wxWidgets? [no ]

отвечаем твердо no
Код

perl build
perl build test
perl build install

6. Cкачивате поcледний релиз WX здесь.
Устанавливате и радуетесь
Код

makefile.pl

После этого makefile.pl ругнется на вас по поводу
Note (probably harmless): No library found for -lunicows
Для решения данной проблемы необходимо сходить на сайт сюда и скачать там библиотеку для mingw32.
после этого скопировать ее в  MinGW\lib\ и все.Все ошибки побеждены.
Код

dmake
dmake test
dmake install


7. После этого можете себе установить Wx-Demo в котором вы найдете пример для RichTextCtrl.

Пробуйте если будут вопросы пишите. Будем думать. smile

Это сообщение отредактировал(а) shamber - 6.4.2009, 09:39
PM MAIL Jabber   Вверх
shamber
Дата 28.10.2008, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: нет
Всего: 18



И еще , по поводу WX для себя я решил что довольно удобно разделять код и визуальное сопровождение.
Поэтому есть смысл использовать механизмы xrc. 
PM MAIL Jabber   Вверх
DaemonSuw
Дата 28.10.2008, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 11.3.2008

Репутация: нет
Всего: 3



 smile Спасибо за подробную инструкцию))) сейчас попробую все откомпилировать... 
Если вам не трудно можете дать более подробную информацию о "механизмы xrc", очень интересно....
PM MAIL ICQ   Вверх
KSURi
Дата 28.10.2008, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: нет
Всего: 27





--------------------
Died at Life.pl line 21
PM Jabber   Вверх
shamber
Дата 28.10.2008, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: нет
Всего: 18




посмотрите в примерах wx-DEMO есть и работа с буффером обмена wxClipboard и XRC

Добавлено @ 16:14
Я с помощью wxGlade(визуальная среда, позволяющая создавать GUI, правда она на python) создаю GUI сохраняю его в формате xrc. а далее подгружаю его. Вообщем если не разберетесь пишите

Это сообщение отредактировал(а) shamber - 28.10.2008, 16:37
PM MAIL Jabber   Вверх
shamber
Дата 28.10.2008, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: нет
Всего: 18



Маленький пример

Присоединённый файл ( Кол-во скачиваний: 23 )
Присоединённый файл  xrc.zip 2,93 Kb
PM MAIL Jabber   Вверх
KSURi
Дата 28.10.2008, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: нет
Всего: 27



shamber, как это умерла? У меня нормально открывается.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
shamber
Дата 28.10.2008, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: нет
Всего: 18



только что не работала, прошу прощения

Это сообщение отредактировал(а) shamber - 28.10.2008, 16:40
PM MAIL Jabber   Вверх
DaemonSuw
Дата 29.10.2008, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 155
Регистрация: 11.3.2008

Репутация: нет
Всего: 3



http://wxglade.sourceforge.net/demo/ - вот нашёл демо ролик по использованию WxGlade - классная штука... Он может генерить не только XRC, но и Perl-овский код)))))
Можете подкинуть инфу или ссылки на форумы по установки Питона и WxGlade, я так понял он на интерпретатор питона встает (от ActiveState подойдет?) 
PM MAIL ICQ   Вверх
shamber
Дата 29.10.2008, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: нет
Всего: 18



DaemonSuw,  ВЫ WxPerl компильнули?

по поводу python, есть другой форум smile а так activestate подходит smile 

DaemonSuw, вот от перловского кода я и ушел, потому что при добавлении новой кнопочки, что-то может затереться, вообщем xrc имхо удобнее.
PM MAIL Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: GUI | Следующая тема »


 




[ Время генерации скрипта: 0.1784 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.