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. |
|
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ś ! |
|
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: #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. |
|
MrPoxipol |
» 2013-12-23 14:53:06 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. |
|
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: 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? |
|
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. |
|
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... |
|
MrPoxipol |
» 2013-12-23 15:54:56 |
|
« 1 » 2 |