Hallo zusammen,
ich verwende Perl jetzt schon länger, hauptsächlich für verschiedene Skripte für meine Linux-Server. Mit grafischer Oberfläche musste ich mich bei Perl noch nie auseinander setzen. Jetzt ist es aber doch mal soweit gekommen. Hier zu meinem Problem:
Ich brauche in meiner Oberfläche eine TreeView mit 2 Ebenen (Parent, Child). Diese sollen sich nach einer bestimmten Zeit (so um die 5 Minuten) automatisch aktualisieren. Und hieran scheitere ich momentan. Ich schaffe es, dass es sich bei einem Klick auf einen Button aktualisiert, wenn ich es aber mit Glib::Timeout versuche alle paar Sekunden hin zu bekommen klappt das nicht. Es ist der gleiche Code aber aus irgendeinem Grund wird er nur einmal ausgeführt. Ich sehe also eine Aktualisierung und habe danach keine automatische Aktualisierung mehr.
Ich habe jetzt schon etliche Sachen und Kombinationen versucht. Unter anderen die verschiedenen Widgets aus ihrem Window/Box per remove zu entfernen, per Glib::Timeout den gesamten GUI-Erzeugenden Teil in eine Schleife zu packen etc....
Wäre um Hilfe echt dankbar, da ich jetzt schon viele Stunden an dem Problem hocke. Im Anhang mein "Versuchscode". Betriebssystem ist das aktuelle Debian Stable(Squeeze).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
use strict;
use warnings;
use Glib qw/TRUE FALSE/;
use Gtk2 '-init';
use utf8;
sub make_tree()
{
my $tree_store = Gtk2::TreeStore->new("Glib::String");
foreach (1..3)
{
my $parent = $tree_store->append(undef);
$tree_store->set($parent, 0, $_);
foreach (1..5)
{
my $child = $tree_store->append($parent);
my $zahl = int(rand(100));
$tree_store->set($child, 0, "CHILD: $zahl");
}
}
my $tree_view = Gtk2::TreeView->new($tree_store);
my $tree_column = Gtk2::TreeViewColumn->new();
$tree_column->set_title("Value");
$tree_column->set_sort_column_id(0);
my $renderer = Gtk2::CellRendererText->new();
$tree_column->pack_start($renderer, FALSE);
$tree_column->add_attribute($renderer, text => 0);
$tree_view->append_column($tree_column);
return $tree_view;
}
my $window = Gtk2::Window->new('toplevel');
my $vbox = Gtk2::VBox->new();
my $button = Gtk2::Button->new("Refresh");
my $tree_view = make_tree();
$vbox->pack_start($tree_view, FALSE, FALSE, 0);
$vbox->pack_start($button, FALSE, FALSE, 0);
$window->add($vbox);
$window->show_all();
$button->signal_connect(clicked => sub{
Gtk2->main_iteration while Gtk2->events_pending;
$vbox->remove($tree_view);
$tree_view = make_tree();
$vbox->pack_start($tree_view, FALSE, FALSE, 0);
$vbox->show_all();
});
my $timer = Glib::Timeout->add(3000, sub{
Gtk2->main_iteration while Gtk2->events_pending;
$vbox->remove($tree_view);
$tree_view = make_tree();
$vbox->pack_start($tree_view, FALSE, FALSE, 0);
$vbox->show_all();
});
Gtk2->main();
Last edited: 2013-06-20 12:10:52 +0200 (CEST)