Изменить поведение обратного вызова "-browsecmd" из Tk :: Tree - PullRequest
2 голосов
/ 19 мая 2011


Моя проблема в том, что подпрограмма из -browsecmd вызывается дважды, когда пользователь нажимает на запись. Активируется при нажатии левой кнопки мыши и при отпускании. Можно ли сказать «-browsecmd» активировать только один раз?

Вот пример сценария, который демонстрирует мою проблему. Когда пользователь нажимает на запись, функция печати вызывается дважды.

#!/usr/bin/perl 

use strict;
use warnings;
use English qw( -no_match_vars );

use Tk;
use Tk::Tree;

my $mw   = MainWindow->new();
my $tree = $mw->Tree(
    -width     => '25',
    -browsecmd => \sub {
        my ($numbers) = @ARG;
        print $numbers. "\n";
    }
);

foreach (qw(one two three four five six )) {
    $tree->add( $ARG, -text => $ARG ); #populates the tree
}

$tree->pack();

MainLoop();

Спасибо за чтение моего сообщения.

EDIT1: забыл опубликовать ссылку на Tk :: Tree Documentation

Ответы [ 2 ]

2 голосов
/ 19 мая 2011

Есть способ избавиться от этого поведения:

my $tree = $mw->Tree(
    -width     => '25',
    -selectmode => "single", # <= this makes it work
    -browsecmd => \sub {
        my ($numbers) = @ARG;
        print $numbers. "\n";
    }
);

Нашел это, просмотрев документацию для родительского виджета: Tk::HList (интересен раздел BINDINGS).

2 голосов
/ 19 мая 2011

Я осмотрелся и обнаружил, что Tk :: Tree действительно Tix Tree под капотом. Копаясь дальше, вы найдете учебник со следующим фрагментом (очень немного адаптированный):

Пример: « мой browsecmd вызывается дважды »

tixScrolledListBox .list -browsecmd Browse
proc Browse args {
    if {[tixEvent type] ne "<ButtonRelease-1>"} {
        puts "browsing [tixEvent value]"
    }
}

Это выглядит весьма актуально, но я не вижу, как tixEvent был отображен в Perl. Возможно, вам придется обратиться непосредственно к сопровождающему Perl / Tk (или отправить отчет об ошибке).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...