Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: gtk label text veranderd niet.  (gelezen 1974 keer)

Offline xellos

  • Lid
  • Steunpunt: Nee
gtk label text veranderd niet.
« Gepost op: 2009/05/27, 17:16:29 »
ik ben bezig met een prog als je daar op de knop chance klikt moet de text van de label veranderen.
maar dan geeft hij een error hier is de code
#include<gtk/gtk.h>

static void chance_label_text(GtkWidget *widget, GtkLabel *label)
{
   gtk_label_set_text(GTK_LABEL(label), "lol");
}

int main(int argc, char *argv[])
{
        GtkWidget *fixed;
        GtkWidget *window;
        GtkWidget *button;
        GtkWidget *label;
        GtkWidget *entry;

        gtk_init(&argc, &argv);

        //Window settings.
        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_title(GTK_WINDOW(window), "Picture View V1.00");
        gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
        gtk_window_set_default_size(GTK_WINDOW(window),200, 150);
        gtk_widget_show(window);

        fixed = gtk_fixed_new();

        //labels.
        label = gtk_label_new("none");
        gtk_fixed_put(GTK_FIXED(fixed), label, 25, 25);

        //entry.
        entry = gtk_entry_new();
        gtk_fixed_put(GTK_FIXED(fixed), entry, 25, 45);

        //buttons.
        button = gtk_button_new_with_label("Chance");
        gtk_fixed_put(GTK_FIXED(fixed), button, 25, 75);

        //Event signals.
        g_signal_connect (G_OBJECT (button), "clicked" , G_CALLBACK (chance_label_text), NULL);

        gtk_container_add(GTK_CONTAINER (window), fixed);

        gtk_widget_show_all(window);
        gtk_main();


        return 0;
}


en dit is de error die hij geeft:
gtk-CRITICAL **: gtk_label_set_text: assertion 'GTK_IS_LABEL(label)' failed
« Laatst bewerkt op: 2009/05/27, 17:18:20 door xellos »

Offline xellos

  • Lid
  • Steunpunt: Nee
Re: gtk label text veranderd niet.
« Reactie #1 Gepost op: 2009/05/27, 21:43:55 »
kan iemand mij meschien helpen?

Offline Nunslaughter

  • Lid
    • timovwb
  • Steunpunt: Nee
Re: gtk label text veranderd niet.
« Reactie #2 Gepost op: 2009/05/27, 21:47:23 »
Misschien wat langer wachten dan 4 luttele uurtjes tot er iemand met ervaring met C/GTK+ voorbijkomt.

Offline MataS

  • Lid
  • Steunpunt: Nee
Re: gtk label text veranderd niet.
« Reactie #3 Gepost op: 2009/05/28, 11:30:31 »
Ik weet niet al te veel van C (ik gebruik zelf PyGTK), maar kun je niet gewoon label als argument geven in gtk_label_set_text? Dus: static void chance_label_text(GtkWidget *widget, GtkLabel *label)
{
   gtk_label_set_text(label, "lol"); // dus gewoon 'label' ipv 'GTK_LABEL(label)'
}
In de documentatie staat dit: http://library.gnome.org/devel/gtk/stable/GtkLabel.html#gtk-label-set-text, misschien kom je daarmee verder?

Offline xellos

  • Lid
  • Steunpunt: Nee
Re: gtk label text veranderd niet.
« Reactie #4 Gepost op: 2009/05/28, 14:26:19 »
nee dan krijg ik de zelfde error

Offline MataS

  • Lid
  • Steunpunt: Nee
Re: gtk label text veranderd niet.
« Reactie #5 Gepost op: 2009/05/28, 17:05:24 »
Weet je zeker dat de callback functie (chance_label_text) als argumenten een GtkWidget en een GtkLabel krijgt??
In pygtk krijgt een callback functie als argumenten het widget waarop het signal werd veroorzaakt en als tweede de user_data, opgegeven bij 'connect'
Indien dit bij C ook het geval is krijgt chance_label_text als tweede argument NULL mee (opgegeven bij g_signal_connect). Dan kun je het oplossen door g_signal_connect (G_OBJECT (button), "clicked" , G_CALLBACK (chance_label_text), NULL);te vervangen door
g_signal_connect (G_OBJECT (button), "clicked" , G_CALLBACK (chance_label_text), label);
// weet niet precies hoe het met pointers werkt, misschien '*label' i.p.v. 'label'?
P.S. het valt me nu pas op maar veranderen op z'n engels is "change", niet "chance" ;)

Offline SeySayux

  • Lid
    • SeySayux.net
  • Steunpunt: Nee
Re: gtk label text veranderd niet.
« Reactie #6 Gepost op: 2009/05/28, 17:07:46 »
#include <QHBoxLayout>
#include <QLabel>
#include <QPushButton>

class MyLabel : public QLabel {
    Q_OBJECT;
public:
     MyLabel(QString text) : QLabel(text) {}
public slots:
     void changeText() {
          setText("lol");
     }
};

int main(int argc, char ** argv) {
    QApplication app(argc, argv);
    
    QWidget win;
    QHBoxLayout layout;
    win.setLayout(layout);

    MyLabel label = "none";
    QButton but = "Change";
    
    QObject::connect(&but, SIGNAL(clicked()), &label, SLOT(changeText()));

    layout.addWidget(&label);
    layout.addWidget(&but);
    win.show();

    return app.exec();
}

Nu even serieus, waarom wil je per sé in GTK ontwikkelen? Qt is veel geavanceerder, gemakkelijker in gebruik en bovendien ook nog cross-platform, wat van GTK niet altijd even goed gezegd kan worden :\ (dat was een eufemisme. GTK-programma's zien er alleen goed uit in Gnome en XFCE, en daar stopt het...)
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline Nunslaughter

  • Lid
    • timovwb
  • Steunpunt: Nee
Re: gtk label text veranderd niet.
« Reactie #7 Gepost op: 2009/05/28, 17:18:04 »
SeySayux: Als de topicstarter in GTK+ wil programmeren, en hij heeft daar een vraag over, laat het dan om met Qt af te komen.

En GTK+ kan zeker goed uitzien op windows.

Offline SeySayux

  • Lid
    • SeySayux.net
  • Steunpunt: Nee
Re: gtk label text veranderd niet.
« Reactie #8 Gepost op: 2009/05/29, 08:04:59 »
Ik denk persoonlijk dat er een fout zit in deze lijn:
        g_signal_connect (G_OBJECT (button), "clicked" , G_CALLBACK (chance_label_text), NULL);En dat het zou moeten zijn:
        g_signal_connect (G_OBJECT (button), "clicked" , G_CALLBACK (chance_label_text), label);
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline MataS

  • Lid
  • Steunpunt: Nee
Re: gtk label text veranderd niet.
« Reactie #9 Gepost op: 2009/05/29, 10:55:59 »
Ik denk persoonlijk dat er een fout zit in deze lijn:
        g_signal_connect (G_OBJECT (button), "clicked" , G_CALLBACK (chance_label_text), NULL);En dat het zou moeten zijn:
        g_signal_connect (G_OBJECT (button), "clicked" , G_CALLBACK (chance_label_text), label);
Vind deze oplossing toch verdacht veel lijken op de mijne... http://forum.ubuntu-nl.org/programmeren/gtk-label-text-veranderd-niet/msg420646/#msg420646

Offline SeySayux

  • Lid
    • SeySayux.net
  • Steunpunt: Nee
Re: gtk label text veranderd niet.
« Reactie #10 Gepost op: 2009/05/29, 16:03:06 »
Ik denk persoonlijk dat er een fout zit in deze lijn:
        g_signal_connect (G_OBJECT (button), "clicked" , G_CALLBACK (chance_label_text), NULL);En dat het zou moeten zijn:
        g_signal_connect (G_OBJECT (button), "clicked" , G_CALLBACK (chance_label_text), label);
Vind deze oplossing toch verdacht veel lijken op de mijne... http://forum.ubuntu-nl.org/programmeren/gtk-label-text-veranderd-niet/msg420646/#msg420646
Sorry, dat had ik niet gezien  :|
I use a Unix-based system, that means I'll get laid as often as I have to reboot.
LibSylph
SeySayux.net

Offline profoX

  • Lid
    • wesley
    • Lionslink
  • Steunpunt: Nee
Re: gtk label text veranderd niet.
« Reactie #11 Gepost op: 2009/05/30, 00:12:27 »
Never mind, MataS/SeySayux hebben al een mogelijke oplossing genoemd ;)
« Laatst bewerkt op: 2009/05/30, 00:17:45 door profoX »
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)