PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Gtk2Perl array in list ?



Chakotay
13-08-2006, 09:27
hab in meiner gtk2 gui vor ne liste anzeigen zu lassen
wo der listen inhalt je listenzeile ein teil aus meinem araay sein sol

kann aber einfach nirgens was finden wie ich das hinbekommen kann


my @text = ("zeile 1", "zeile 2", "zeile 2");

my $list = Gtk2::List->new();
$fixed3->put(list, 0, 16);
$ist->set_size_request(160, 192);
$list->show;

weiss jemand wie ich den array in die list bekomm?

ach ja muss was variabeles sein weil bei jedem neuen start der gui
der array um ne zeile länger oder kürzer sein kann

Chakotay
13-08-2006, 18:00
ok habs nu mit sauviel rumprobieren geschafft das der inhalt meiner arrays in der liste ist
was ich einfach nicht herausfinden kann ist
wie ich den in der gui markierten listeintrag weiterverarbeiten kann :-(

foreach my $CSTEMPFAV (@CSAFAV)
{
#$CSTEMP2++;
my $fav_list_item = Gtk2::ListItem->new ("$CSTEMPFAV");
$fav_list->add($fav_list_item);
}

ausserdem fehlt meiner liste noch n scrollbalken falls die einträge mehr werden

jeebee
13-08-2006, 19:57
scrollbalken:

# ich weiss nicht genau wie das mit den Adjustments funktioniert,
# einfach ausprobieren um vernünftige Werte zu erhalten. Hat damit zu tun
# wieviele Listeneinträge auf eine "Seite" im ScrolledWindow passen.
$h_adj = Gtk2::Adjustment->new(0,0,1,1,1,1);
$v_adj = Gtk2::Adjustment->new(0,0,5,1,5,5);
$scrolled_window = Gtk2::ScrolledWindow->new($h_adj, $v_adj);
# Scrollbalken nur anzeigen wenn nötig
$scrolled_window->set_policy(GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);

# die Liste ins ScrolledWindow einfügen.
$scrolled_window->add_with_viewport($list);

mit dieser Funktion erhältst du den Text des aktuell ausgewählten Eintrags

sub selection_event
{
my ($list, $item) = @_;
$label = $item->get_child;
print $label->get_label;
print "\n";
return;
}
wenn du im Hauptprogramm noch diese Zeile einfügst

$list->signal_connect("select-child" => \&selection_event, null);
Damit verbindest du die Liste mit der Funktion selection_event welche im Beispiel nur den Text des ausgewählten Eintrags ausgibt.

Chakotay
13-08-2006, 20:29
den Scrollbalken krieg ich immo noch nicht so recht eingefügt (kommt aber bestimmt noch wenn ich morgen nicht mehr so müde bin^^)

aber der rest hat prima hingehauen danke ! :-)

du kennst dich nicht zufällig auch mit Gtk2::Entry aus ?
ich hab nenbutton der ne sub ausführt
und in der sub soll der input aus dieser box als variabele verwendet werden
wie krieg ich den input aus dem Gtk2::Entry in eine var ? oder überhaupt irgendwie ausgelesen ?


my $qry_add = Gtk2::Entry->new();
$fixed3->put($qry_add, 232, 224);
$qry_add->set_size_request(158, 22);
$qry_add->show;

jeebee
13-08-2006, 20:46
sub get_text
{
my($button, $entry) = @_;
$text = $entry->get_text;
return;
}

# Hauptprogramm
$button->signal_connect(clicked => \&get_text, $qry_add);


Sollte so gehen.

Chakotay
14-08-2006, 05:55
jo tuts auch :-) danke


-----
edit

mist nu hab ich mir nen bug eingefangen :-(
wollte gucken ob ich das mit dem button auch auf die liste anwenden kann (ohne erfolg) :-(
was muss ich da noch beachten damits klappt ?


*** unhandled exception in callback:
*** Can't locate object method "get_child" via package "Gtk2::List" at /home/chakotay/.xchat2/CS-MODULE/ChakoSettings.pl line 594.
*** ignoring at (eval 31) line 565.

---
edit2

ok ich weiss nicht ob die lösung so elegant ist oder obs noch schöner geht
aber immo scheints zu gehen


my $querry_del_mark;

sub selection_event_get
{
my ($querry_list, $item) = @_;
my $label = $item->get_child;
$querry_del_mark = $label->get_label;
return;
}

sub selection_event
{
IRC::print $querry_del_mark;
return;
}

jeebee
14-08-2006, 18:30
was wolltest du denn bei der Liste mit get_child respektive dem Button erreichen?

Chakotay
14-08-2006, 18:53
im GANZEN ich will ne textdatei in ein array den array in die liste
dann einen eintrag in der liste markieren und bei klick des button soll genau dieser eintrag aus dem array und aus der liste entfernt werden
damit ich anschliessend die textdatei wieder mit dem inhalt aus den geänderten array überschreiben kann :-)

leider funst das immo noch nicht so hanz so wie ich es möchte^^

jeebee
14-08-2006, 20:56
da kann ich dir leider nicht weiterhelfen, da ich perl nicht gut genug beherrsche. Ich programmiere normalerweise Gtk+ mit C. Sorry!

Chakotay
14-08-2006, 21:42
ich kann perl ja auch noch nicht so wirklich^^

deshalb mach ich das ja :-) hast mir aber schon viel geholfen

hab das mit dem scrollbalken nu auch hinbekommen
war aber ne ganz schöne ausprobiererei^^


my $scrolledwindow1 = Gtk2::ScrolledWindow->new();
$fixed3->put($scrolledwindow1, 0, 16);
$scrolledwindow1->set_size_request(160, 192);
$scrolledwindow1->set_policy("GTK_POLICY_AUTOMATIC", "GTK_POLICY_ALWAYS");
$scrolledwindow1->show;

my $fav_list = Gtk2::List->new();
$fav_list->signal_connect("select-child" => \&selection_event2_get);
$scrolledwindow1->add_with_viewport($fav_list);
$fav_list->show;

Chakotay
15-08-2006, 19:08
noch ne kleine frage zur gtk2::list
und zwar möchte ich auf buttonklick den markierten eintrag löschen
mit
$list->clear_items("0, 1");
würde ich den ersten löschen
mit
$list->clear_items("1, 2");
den zweiten usw.

aber ich konnte einfach nicht herausfinden wie ich nicht einen genau positionierten
sondern einfach mal den in der list markierten entfernen kann :-(

weiss jemand da weiter ?

jeebee
15-08-2006, 20:11
nein, denn ich brauche normalerweise GtkTreeView für solche Dinge. Ist zwar komplizierter zum Erstellen, bietet aber auch mehr Funktionalität.

Chakotay
15-08-2006, 21:20
haste davon mal ne tutorial seite btw iss das mit perl kompatibel (man kann da ja man reinschauen^^)

jeebee
16-08-2006, 17:57
http://gtk2-perl.sourceforge.net/doc/pod/

Alle vorhandenen Gtk2 Perl Bindings dokumentiert. Auf dieser Seite nach Gtk2::TreeView suchen.