Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

GTK. GUI dla programu, pomoc.

Ostatnio zmodyfikowano 2013-12-23 16:51
Autor Wiadomość
dejmien
Temat założony przez niniejszego użytkownika
GTK. GUI dla programu, pomoc.
» 2013-12-23 12:12:50
Witam.

Chciałem utworzyć GUI dla mojego programu szyfrującego, jednak dopiero zaczynam naukę GTK dlatego potrzebuję pomocy. Do rozmieszczenia przycisków zdecydowałem się użyć kontenera GtkVbox.

1. Gtkimage czy da się z tego zrobić tło do menu programu? Bo gdy używam Gtkimage to wyświetla mi się okienko z obrazkiem, ale nie widać przycisków.

2. Potrzebuję jakoś pobrać od użytkownika tekst, który ma później zostać zaszyfrowany. Tylko nie wiem jak mam ten tekst pobrać. I do czego użytkownik ma wpisać ten tekst?Do GtkEntry? No bo np. użytkownik wciska klawisz ,,szyfrowanie" i zostaje uruchomiona funkcja w której jest kod odpowiedzialny z wyświetlenie GtkEntry no i teraz nie wiem jak mam pobrać ten tekst... mam użyć jakoś cin? Na a później jak już pobiorę ten tekst no to będzie z górki bo kod odpowiedzialny za szyfrowanie mam już gotowy. Wynik chcę wyświetlić w GTkTekstWiev.
P-99923
Badman
» 2013-12-23 14:23:59
Ja bym urzył GtkToolbar https://developer.gnome.org/gtk2/stable/GtkToolbar.html

Ad. 1. GtkImage sie do tego nie nadaje, raczej powineneś iść w strone gdk-pixbuf.

Ad. 2. Tak użyj GtkEntry. Kontrolkę GtkEntry należy skojarzyć  z odpowiednim sygnałem i obsługe przekazać funkcji skojarzonej z tym sygnałem.

Przeczytaj kurs o Gtk+. Pokaż kod, który juz naskrobałeś !
P-99932
dejmien
Temat założony przez niniejszego użytkownika
» 2013-12-23 14:30:12
Na chwile obecną jestem na etapie tworzenia GUI i kod wygląda na razie tak:


C/C++
#include <gtk/gtk.h>


void pokaz_dialog( GtkWidget * widget, gpointer okno )
{
    GtkWidget * dialog = gtk_about_dialog_new();
    GdkPixbuf * pixbuf = gdk_pixbuf_new_from_file( "Enigma-logo.jpg", NULL );
   
    gtk_about_dialog_set_name( GTK_ABOUT_DIALOG( dialog ), "ENIGMA" );
    gtk_about_dialog_set_version( GTK_ABOUT_DIALOG( dialog ), "1.0" );
    gtk_about_dialog_set_copyright( GTK_ABOUT_DIALOG( dialog ), "Autor: Damian Uroda" );
    gtk_about_dialog_set_comments( GTK_ABOUT_DIALOG( dialog ), "ENIGMA - Program szyfrujaco-deszyfrujacy." );
    gtk_about_dialog_set_logo( GTK_ABOUT_DIALOG( dialog ), pixbuf );
    g_object_unref( pixbuf ), pixbuf = NULL;
    gtk_dialog_run( GTK_DIALOG( dialog ) );
    gtk_widget_destroy( dialog );
}




int main( int argc, char * argv[] )
{
    GtkWidget * okno;
    GtkWidget * vbox;
   
    GtkWidget * Szyfrowanie;
    GtkWidget * Odszyfrowywanie;
    GtkWidget * O_Programie;
    GtkWidget * Wyjscie;
   
    gtk_init( & argc, & argv );
   
    okno = gtk_window_new( GTK_WINDOW_TOPLEVEL );
    gtk_window_set_position( GTK_WINDOW( okno ), GTK_WIN_POS_CENTER );
    gtk_window_set_default_size( GTK_WINDOW( okno ), 340, 360 );
    gtk_window_set_title( GTK_WINDOW( okno ), "ENIGMA v1.0" );
    gtk_container_set_border_width( GTK_CONTAINER( okno ), 10 );
   
   
    vbox = gtk_vbox_new( FALSE, 1 );
    gtk_container_add( GTK_CONTAINER( okno ), vbox );
   
    Szyfrowanie = gtk_button_new_with_label( "Szyfrowanie" );
    Odszyfrowywanie = gtk_button_new_with_label( "Odszyfrowywanie" );
    O_Programie = gtk_button_new_with_label( "O Programie" );
    Wyjscie = gtk_button_new_with_label( "Wyjscie" );
   
    gtk_box_pack_start( GTK_BOX( vbox ), Szyfrowanie, TRUE, TRUE, 0 );
    gtk_box_pack_start( GTK_BOX( vbox ), Odszyfrowywanie, TRUE, TRUE, 0 );
    gtk_box_pack_start( GTK_BOX( vbox ), O_Programie, TRUE, TRUE, 0 );
    gtk_box_pack_start( GTK_BOX( vbox ), Wyjscie, TRUE, TRUE, 0 );
   
    g_signal_connect( G_OBJECT( O_Programie ), "clicked", G_CALLBACK( pokaz_dialog ),( gpointer ) okno );
    g_signal_connect( G_OBJECT( Wyjscie ), "button_release_event", G_CALLBACK( gtk_main_quit ), NULL );
   
    gtk_widget_show_all( okno );
   
    gtk_main();
   
    return 0;
}

Nie mogę wykombinować jak powinna wyglądać funkcja, która się uaktywni po wciśnięciu odpowiedniego przycisku i wyświetli GtkEntry i pobierze znak.
P-99933
MrPoxipol
» 2013-12-23 14:53:06
urzył
a ja bym użył :P

Po prostu po kliknięciu przycisku 'szyfruj' utwórz okienko (pochodne), w którym wyświetlisz 2 text boxy - jeden wejściowy, drugi wyjściowy, czyli jak widzisz Entry odpada, a TextView będzie do tego odpowiedni.

PS Nie rozumiem jak chcesz wyświetlić ten obrazek? On ma być tłem? Bo jak tak to zainteresuj się gtkrc. A swoją drogą polecam dokumentacje gtk.
P-99938
dejmien
Temat założony przez niniejszego użytkownika
» 2013-12-23 15:07:30
Acha faktycznie nowe okienko... ok to teraz wiem co robić...


Nie uczę się z dokumentacji tylko z kursu na stronie.


Ok mam taką funkcje:


C/C++
void tekst( int argc, char * argv[] )
{
   
    GtkWidget * okno;
    GtkWidget * textView;
    GtkTextBuffer * bufor;
    GtkTextIter iter;
   
    gtk_init( & argc, & argv );
   
    okno = gtk_window_new( GTK_WINDOW_TOPLEVEL );
    gtk_window_set_position( GTK_WINDOW( okno ), GTK_WIN_POS_CENTER );
    gtk_window_set_default_size( GTK_WINDOW( okno ), 250, 200 );
    gtk_window_set_title( GTK_WINDOW( okno ), "Szyfrowanie" );
    gtk_container_set_border_width( GTK_CONTAINER( okno ), 10 );
   
    textView = gtk_text_view_new();
    bufor = gtk_text_view_get_buffer( GTK_TEXT_VIEW( textView ) );
    gtk_text_buffer_get_iter_at_offset( bufor, & iter, 0 );
    gtk_text_buffer_insert( bufor, & iter, "Wpisz tekst do zaszyfrowania.\n", - 1 );
   
    gtk_container_add( GTK_CONTAINER( okno ), textView );
   
    g_signal_connect( G_OBJECT( okno ), "destroy", G_CALLBACK( gtk_main_quit ), NULL );
   
    gtk_widget_show_all( okno );

No i jest możliwość wpisywania tekstu do okienka, ale jak pobrać ten tekst? tzn. jak zapisać ten tekst co wpisze użytkownik do zmiennej?

I mam jeszcze problem bo, gdy zamykam to drugie okienko to zamyka mi się cały program... jak zrobić żeby po zamknięciu zamykało mi się tylko to okienko z tekstem a menu zostawało?
P-99940
MrPoxipol
» 2013-12-23 15:36:16
No bo jak nie wiesz jak działają sygnały to tak jest..
Nie uczę się z dokumentacji tylko z kursu na stronie.
No to się na prawdę dużo nauczysz nie zaglądając do dokumentacji..
gtk_init() powinno być tylko raz wywoływane w programie.
Czemu zamyka ci się program? Bo łączysz sygnał zamknięcia okienka pochodnego z wyjściem z programu?
Polecam dokumentacje.
P-99945
dejmien
Temat założony przez niniejszego użytkownika
» 2013-12-23 15:47:32
Chodzi mi tylko o to jak pobrać ten tekst od użytkownika i zapisać go do stringu...
P-99946
MrPoxipol
» 2013-12-23 15:54:56
http://stackoverflow.com​/questions/11088338​/how-to-save-content-of-gtktextbuffer-to-a-file
Frazy, które należy wpisać w wyszukiwarkę google:
P-99948
« 1 » 2
  Strona 1 z 2 Następna strona