Wx :: Log :: SetFormatter недоступен в wx perl для установки специального средства форматирования журнала - PullRequest
1 голос
/ 15 апреля 2020

Я использую wx perl (версия .9932) для интерфейса GUI в моем консольном приложении. Я хочу использовать пользовательский форматировщик журнала, и для этого унаследовал класс от 'Wx :: PlLogFormatter' и переопределил подпрограмму форматирования в производном классе. этот perl пакет Wx :: PlLogFormatter определен в файле log.xs с новыми и уничтожаемыми Xsubs.

MODULE=Wx PACKAGE=Wx::PlLogFormatter

wxPlLogFormatter*
wxPlLogFormatter::new()
  CODE:
    RETVAL = new wxPlLogFormatter( CLASS );
  OUTPUT: RETVAL

void
wxPlLogFormatter::Destroy()
  CODE:
    delete THIS;

В соответствии со страницей справочника wxwidget, мы можем установить собственный форматер журнала, используя метод Setformatter класса WxLog ,

https://docs.wxwidgets.org/3.0/classwx_log.html https://docs.wxwidgets.org/3.0/classwx_log_formatter.html

Но когда я использую метод SetFormatter с объектом Wx :: LogTextCtrl, он дает мне ниже ошибка

Не удается найти метод объекта "SetFormatter" через пакет "Wx :: LogTextCtrl" в строке 41 MyFrame1.pm.

Это я использую в моем Мой класс Frame для создания целевого объекта Log Wx :: LogTextCtrl

$self->{txtctrl} = Wx::TextCtrl->new($panel,-1,'',[-1,-1],[400,300],wxTE_RICH | wxTE_MULTILINE);    
    Wx::Log::EnableLogging(1);
    my $log =Wx::LogTextCtrl->new( $self->{txtctrl} );
    Wx::Log::SetActiveTarget($log);
    my $log_format = customLogFormat->new();
    $log->SetFormatter($log_format);
    my $string = 'frame has been created';
    Wx::LogMessage("%s",$string);

и ниже - это мой пользовательский класс форматирования Log

package customLogFormat;
no strict;
use warnings;
use Wx qw(:everything);
use base 'Wx::PlLogFormatter';

sub new {
    my $class = shift;
    my $self = $class->SUPER::new();
    print "$self";
    return $self;
}

sub Format {
    my ($self,$level,$msg, $log_record)= @_;
    my $string = "$level" . "$msg";
    return $string;
}
1;

Согласно руководству Wxwidget, выведите класс из класса WxLogFormatter и переопределить его метод форматирования, чтобы создать собственный форматтер журнала и использовать метод Wx :: Log :: SetFormatter () с целевым объектом WxLog.

Есть ли у нас какой-либо метод для использования собственного форматера журнала в wx perl?

спасибо

...