[PHP GTK2] callback-Function copy-clipboard

Crys

Lt. Commander
Registriert
Apr. 2009
Beiträge
1.601
Servus Zusammen,

ich muss gestehen, dass ich noch nie wirklich oop programmiert habe und da wird auch das Problem liegen.
Für einen kleines PHP-GTK2 Skript benötige ich, dass der Inhalt eines Input-Feldes in die Zwischenablage kopiert wird, ich verstehe aber nicht ganz, wie ich die copy-clipboard-Funktion aufrufen soll?

PHP:
<?

function copy2Clipboard(GtkLabel $cInpTest)
{
    // http://gtk.php.net/manual/en/html/gtk/gtk.gtkentry.signal.copy-clipboard.html
    
    //$strEntry = $cInpTest->get_text();
    //$strEntry->copy-clipboard();

    //connect('copy-clipboard', GtkEntry $entry);
    //copy_clipboard();
    
    $cInpTest->connect('copy-clipboard');

    // Delete the Text
    $cInpTest->set_text("");
}

//Create the window
$cWnd = new GtkWindow();
$cWnd->set_title('Test');
//Close the main loop when the window is destroyed
$cWnd->connect_simple('destroy', array('gtk', 'main_quit'));

$cLblTest = new GtkLabel('_Test', true);
$cInpTest = new GtkEntry("TextDerKopiertWerdenSoll");
$cButCopy = new GtkButton('_Kopieren');

//Call the login function when the user clicks
$cButCopy->connect_simple('clicked', 'copy2Clipboard', $cInpTest);

//Lay out all the widgets in the table
$cGuiTab = new GtkTable(1, 2);
$cGuiTab->attach($cLblTest, 0, 1, 0, 1);
$cGuiTab->attach($cInpTest, 1, 2, 0, 1);

//Add the button to a button box
$cGuiBox = new GtkHButtonBox();
$cGuiBox->set_layout(Gtk::BUTTONBOX_EDGE);
$cGuiBox->add($cButCopy);

//Add the table and the button box to a vbox
$cGuiVBox = new GtkVBox();
$cGuiVBox->pack_start($cGuiTab);
$cGuiVBox->pack_start($cGuiBox);

//Add the vbox to the window
$cWnd->add($cGuiVBox);
//Show all widgets
$cWnd->show_all();
//Start the main loop
Gtk::main();

?>
Der gtk-Teil stimmt sowie, ist bis auf die Fuinktion aus dem Beispiel Skript übernommen.

Danke euch :D
 
Crys schrieb:
Der gtk-Teil stimmt sowie, ist bis auf die Fuinktion aus dem Beispiel Skript übernommen.
Vielleicht solltest Du die GTK-Doku zu Rate ziehen.

Ich mein, was erwartest Du? Du willst Dich nicht mit der Thematik beschäftigen, Copy-Pastesst irgendwelche Codeschnipsel die dann nicht funktionieren und willst dann, dass jemand anders das für Dich repariert? Find' ich schon etwas dreist.
 
Finde ich auch schon verdammt dreist, dass ich hier einfach im Forum frage ohne meinen Doktor in php-gtk2 zu machen ... sehe ich genauso :mussweg:

Ne, jetzt mal im ernst ... es ist vielleicht nicht aus meiner Frage so hervorgegangen: ich kenne mich mit oop nicht allzu gut aus, deshalb weiß ich nichts mit einer callback-Funktion anzufangen!
Deshalb ganz oben im Skript die Versuche von mir, wie man die Funktion hätte eventuell anwenden können, es aber nicht geklappt hat. Deshalb auch mehrfach der Hinweis das es wohl aus meiner Sicht am oop liegt ...


Das Skript ist nur das Minimal-Lauffähige-Funktions-Beispiel, damit jemand anderes das auch testen kann. Das original Skript hat ~700 Zeilen, ist von mit geschrieben und läuft auch soweit. Der Hinweis das es wie das Beispielskript ist, soll nur zeigen das es am php-gtk2 Syntax nicht liegen sollte, dass es nicht funktioniert.

Wenn du mir sagst, wie ich die"copy-clipboard" callback-Function auf $cInpTest anwenden kann, bin ich rundum zufrieden! Mehr erwarte ich nicht ...
 
Zuletzt bearbeitet:
Crys schrieb:
Finde ich auch schon verdammt dreist, dass ich hier einfach im Forum frage ohne meinen Doktor in php-gtk2 zu machen ... sehe ich genauso
Doktor verlangt ja keiner. Aber mal in die Doku gucken wird ja nicht so schwer sein.


Crys schrieb:
Ne, jetzt mal im ernst ... es ist vielleicht nicht aus meiner Frage so hervorgegangen: ich kenne mich mit oop nicht allzu gut aus, deshalb weiß ich nichts mit einer callback-Funktion anzufangen!
Noch nie waren die Recherche-Möglichkeiten so gut wie heute. Wie hab ich das nur alles zu meiner Zeit geschafft. *Kopp_schüttel*

Also ich kenn mich weder mit PHP noch mit GTK+2 aus. Sehe aber trotzdem, die entscheidende Funktion ist copy2Clipboard und die Zeile 30:
Code:
$cButCopy->connect_simple('clicked', 'copy2Clipboard', $cInpTest);
Wobei $cButCopy ne Variable ist und connect_simple offentsichtlich ne Funktion, Methode was auch immer.
Also schlag ich im Handbuch nach:
http://gtk.php.net/manual/en/gobject.method.connect_simple.php

Danach ist schon allein der Aufruf falsch. Der erste Parameter ist ein String. Soweit korrekt.
Der zweite Parameter ist aber ein Callback. Da steht bei Dir aber auch ein String. Kann also von daher schon nicht klappen.

Wie könnte so ein Callback aussehen? Keine Ahnung. Ich sehe aber, dass ein paar Zeilen drüber ein ähnlicher Aufruf steht;
Code:
$cWnd->connect_simple('destroy', array('gtk', 'main_quit'));

Aha. Offenbar wird dieses Callback als 2-elementiges Array angegeben.
Kurze weitere Recherche ergibt, dass Gtk wohl ein Objekt ist und main_quit wohl eine Funktion dieses Objektes.

So. Aber wie rufen wir nu unsere Funktion copy2Clipboard auf. Ich hab keine Ahnung. Aber ich kenne Suchmaschinen und die führen mich z.B. zu diesem Beispiel:
http://phpgtktutorials.blogspot.de/2012/10/windows-or-dialogs-in-php-gtk.html

Dort ist auch ein Beispiel, dass nahelegt, Zeile 30 mal so auszuprobieren:
Code:
$cButCopy->connect_simple('clicked', array($this, 'copy2Clipboard'), $cInpTest);


Crys schrieb:
Deshalb ganz oben im Skript die Versuche von mir, wie man die Funktion hätte eventuell anwenden können, es aber nicht geklappt hat.
Nur sehe ich von den Versuchen nichts. Schon allein der Aufruf in Zeile 30 sieht nicht dem ähnlich, was man so im im Internet in den Tutorials findet. Der ist nicht mal so, wie er in Deinem eigenen Quelltext ist.

Das legt einfach nahe, dass Du lediglich irgendwas getippt hast ohne Dir ne Birne zu machen. Ohne zu recherchieren. Ich weiß auch nicht, ob es jetzt mit meiner Änderung klappt. Aber ich behaute mal ganz kühn ich bin näher an der Lösung dran als vorher. Und das ohne Kenntnis und mit nur 5 Minuten Recherche.

Abgesehen davon ist "Funktioniert nicht" ohnehin keine Fehlerbeschreibung. Es ist auch im Code nicht erkennbar, dass Du zum beispiel mit einer Konsolenausgabe mal testest, ob copy2Clipboard überhaupt aufgerufen wird oder ähnliches.
Da ist einfach nix was darauf hindeutet, dass Du Dich mit dem Problem auseinandergesetzt hast.
 
Zuletzt bearbeitet:
Zurück
Oben