Fórum Ubuntu CZ/SK
Ostatní => Archiv => Téma založeno: chessx 22 Srpna 2007, 14:19:17
-
Hrál jsem si dneska chvilku s Glade Interface Designerem. Nepodařilo se mi tlačítkem na formuláři JEDNA otevřít okno DVA.
Ví někdo jak to provést? Bez ohledu na to zda se nové okno otevře přes první okno nebo první okno se zavře a nové otevře.
Děkuji za pomoc
-
Myslim ze to resi funkce gtk_window_show()... nebo lepe gtk_window_new(): http://library.gnome.org/devel/gtk/unstable/GtkWindow.html#gtk-window-new
Kdyz uz jsme u toho... nevim treba se to tu resilo. Nebylo by od veci zalozit na foru sekci pro vyvojare? :)
Edit: Pokud s GTK+ zacinate a zvladate anglictinu, velice pekne je zpracovany tutorial: http://library.gnome.org/devel/gtk-tutorial/stable/
-
gtk_window_show() jsem zkoušel, ale problém je, že nezná parapetr DVA (to je název druhého okna) a já nevím, kde mu to druhý okno nadefinovat. Když dám gtk_window_hide(JEDNA), tak původní okýnko zmizí (to znamená, že signál funguje), ale nevím co s tím druhým - nevím jak jednomu říct, že tam má to druhý a naopak. V pascalu jsem psal vždycky uses(co má použít), tím jsem měl odvolávku hotovou, ale tady nevím.
-
No je to Cecko... tudiz bych to videl na #include "wokno2.h".
-
to tam nevznikne. obě okna jsou tvořeny v interface.c blokama:
GtkWidget*
create_window1 (void)
{
...
return window1;
}
create_window2 (void)
{
...
return window2;
}
a ještě se interface.c odvolává pomocí #include interface.h na interface.h, kde je
GtkWidget* create_window1 (void);
GtkWidget* create_window2 (void);
Takže jsem měl pocit, že je to nadefinovaný. Singál z knoflíku mám gtk_widget_show (window2). Generování pomocí ./autogen.sh proběhne v pořádku, ale po příkazu make mě to hodí error v interface.c
"window2 undeclared (first use in this function)".
No, a mně není jasný, kde to deklarovat.
-
Ono ale "window2" memi opravdu definovany (ani deklarovany). :)
Neni nahodou definice umistena v tele funkce create_windowX()???
-
Já právě nevím, kde je to definovaný. Já jsem to začal zkoušet. Dokud jsem měl jedno okno, tak to šlo, ale jak jsem přidal druhý, tak to začalo házet chyby. Když to druhý okno z odkazu vyndám, tak se chyba neobjeví. Když dám na tlačítko gtk_window_hide(window1), tak to jde zkompilovat bez chyby. Původní okýnko zmizí, ale to druhý nevidím a nevidím.
Já právě potřebuju zjistit, kde se to definuje, aby v okamžiku volání f-ce o window2 věděl.
-
Aby slo pouzivat promennou v celem rozsahu zdrojovych kodu, musi byt deklarovana ci definovana globalne. To znamena vne funkci. Podle nepsanych pravidel se globalni deklarace umistuje do hlavickoveho souboru (*.h), globalni definice do zdrojoveho souboru (*.c).
Poslete sem celej kod napr. funkce create_window1();
-
Nemůžu to najít. Souborů je tam dost a tolik tomu nerozumím. Myslel jsem si ale, že když v GLADE přidám okno (nebo nějaký objekt), že je automaticky přidáno do projektu a můžu na něj přeměrovat signály, aniž bych cokoliv doprogramovával.
Myslel jsem si, že doprogramovávám až výpočty a pod., nikoli formuláře.
-
To samozrejme je... ale jak kdysy nekdo rekl: "Jazyk C je mocny, tajemny a nevyzpitatelny."
Glade sice ulehcuje tvorbu GUI v GTK+/Gnome, ale nenaprogramuje za vas vazby a algoritmy. To vse je nutne dodelat. Glade neni typove jako Delphi nebo C++ Builder. Slouzi pouze k tvorbe interface.
Spoustu veci zvladne samo... moznost signalovani je perfektni, ale musite si vse doprogramovat sam.
K tomu oknu. Ono v projektu je. Pouze musite doprogramovat vazby mezi funkcemi a okny.
-
Hm, pak tomu už vůbec nerozumím. Myslel jsem, že signály pokrývaj základní operace a já potom programuju pouze výpočty nebo extra f-ce, ale otevření okna, když je tam gtk_widget_show sem myslel zvládne GLADE sám - tím spíš, že sem tam okno vložil z palety, tak by o něm měl vědět - pěkně blbý
Na odkaz na dokumentaci sem se díval, ale všude je řešeno jenom jedno okno a navíc to překládaj pomocí gcc příkazu. To jsem taky zkusil. Vytvořil sem si adresář do něj soubor base.c do kterýho sem vložil zdrojový text z manuálu. Spustil sem na to gcc a hodilo mě to error:
GtkWidget undeclared (`first` used at this function)
Přitom GTK+ 2 mám v Synaptiku nainstalováno. tak to se asi nic nenaučím, když mě nejdou ani příklady z manuálu
Dík
-
Jo tak... hlavickovy soubory GTK+ chybeji. ;)
Aby sli ty priklady z tutorialu sestavit, je nutne doinstalovat:
sudo apt-get install libgtk2.0-dev libglib2.0-dev
-
tak to asi není ono - já mám GTK a GLADE instalován přes Synaptic - příkaz jsem zkusil (opsal) - psalo to bla bla bla a nakonec to vypsalo :
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded
nevím, proč mě ty příklady nejdou
-
A zadal jste dobre parametry kompilatoru?
gcc vstup.c -o vystup `pkg-config --cflags --libs gtk+-2.0`
-
zadal - ty byly v příkladu taky
-
Tak v cem udelali soudruzi z NDR chybu? :/
-
Hraju si hraju - problém o kterém jsem psal byl s GLADE 2.12.1, který byl v instalačním balíku UBUNTU 7.04. Včera večer jsem večer stáhnul ještě GLADE 3.2.0
Problém je v tom, že starší verze produkuje kód v "C" po stlačení tlačítka "BUILD". Nová verze tlačítko "BUILD nemá - to mě nejdřív znervoznilo - pak jsem však zjistil, že produkuje kód v "XML" => jméno souboru je test.glade a v hlavičce má:
Jak se takový soubor spouští jako program??
-
S novodobym Glade jsem zatim jeste nepracoval... nicmene jsem nasel Tutorial z kteryho by to melo jit vycist: http://www.gnome.org/~newren/tutorials/developing-with-gnome/html/ch02s02.html
Edit: Pripadne nekolik dalsich zdroju: http://ubuntuforums.org/archive/index.php/t-490632.html
-
Jo tam už jsem se taky dostal, jenže příkaz z prvního těla progrmau, který mě volá XML zdroják (jeden z příkladů, který tam jsou):
main_window = glade_xml_new ("example-1.glade", NULL, NULL);
mě hodí při přakladu error:
GladeXML undeclared (first use in this function
Tak fakt nevím, jak ten příklad rozchodit.
-
Podle me je to uplne ten samy problem jako jsme resili pred tim. Datovy typ "GladeXML" je definovan v hlavickovych souborech GTK+. Tudiz, bud nejsou hlavickove soubory nainstalovany, nebo cesta k nim neni podsunuta kompilatoru.
Co se mi podarilo zjistit... k nacitani XML interface Glade v runtime (plus k vyvoji) jsou potreba tyto dve knihovny:
sudo apt-get install libglade libglade-devA tyto navic s podporou Gnome widgetu:
sudo apt-get install libglade-gnome0 libglade-gnome0-devEdit: Navic je nutno kompilatoru priradit jako pouzitou knihovnu libglade-2.0 (viz http://www.gnome.org/~newren/tutorials/developing-with-gnome/html/re07.html)
-
Tak jsem připojil konečně UBUNTU přes WIN na INTERNET. Vložil jsem první příkaz:
sudo apt-get install libglade libglade-dev
a dostal jsem hlášku:
could not find package libglade
Vypadá to, že hledá balíčky pořád na instalačním DVD a ne na internetu. Jak to mám přesměrovat na internet, tak jak to bylo po nainstalování systému?
-
mám ale nainstalováno libglade2-0 a libglade2-dev
nestačí to??
-
Moje chyba... jsou to ty balicky co jste napsal vy, pripadne libglade0 a libglade0-dev. Stale to hazi tu samou chybu?
-
Tak jsem se vrátil ke starší verzi GLADE 2.12.1, kde není kód XML a po dlouhým zjištění jsem našel, že sice v interface.c je okno windowě vytvořený, ale v main.c chybí příkazy:
GtkWidget *window2;
windowě = create_window2();
gtk_widget_show(window2)
Nepochopil jsem ale, proč create(window2) je interface.c a potom znovu v main.c
Takže více okýnek tvořit umím, ale teď nevím kam dopsat obsluhu pro stisk tlačítka. Mám sice pro stisk tlačítka "signál", ale nevím v kterým programu a vkterým bloku to obsloužit - popřípadě, jestli zmínku zase nemusím napsat do více částí jako u příkazu create???
Kdyby někdo věděl, jak zkompilovat XML z GLADE, tak bych byl taky rád, alespoň bych mohl zkusit i novější verzi GLADE.
Děkuju, děkuju
-
Po pridani signalu prvku a vygenerovani projektu v callbacks.c prida funkce pro obsluhu.
Takze napriklad pro obsluhu prvku tridy *button:
void on_button1_clicked(GtkButton *button,gpointer user_data)
{
;
}Do jejiho tela pridate vlastni obsuhu funkce a je to...
-
Díky za radu, ale nějak mě to nejde.
Vepsal jsem kód do callbacks.c a jako tělo programu jsem vložil:
label1.Label = "stisk tlacitka"
zkoušel jsem i druhé uvozovky, ale hází to chybu při make "callbacks error"
Jak při stiskuzměním název tlačítka?
Kam se mám prosím podívat? V nápovědě je pouze jak se s GLADE zachází ohledně prvků, ale nenašel jsem popis kam co se vepisuje a jak píšu obsluhu.
Děkuju
-
Musite si uvedomit ze GLADE pouziva ve vychozim nastaveni jazyk C... a ten neni obohacen objektovym programovacim modelem. Ke vsem parametrum prvku se pristupuje pomoci funkci.
Tedy zhruba takto po stisku tlacitka prejmenujete label samotneho tlacitka:
void on_button1_clicked (GtkButton *button, gpointer user_data)
{
gchararray novy_label = "NovyLabel";
gtk_button_set_label(button, novy_label);
}Jako parametr funkce je uveden pointer na button, pres ktery komunikuje zbytek programu s tlacitkem a naopak. Zadna globalni deklarace button1 neexistuje. ;)
Je tomu tak z dubvodu, aby u programu s vice okny mohlo byt vice nezavislych prvku definovanon jako button1.
-
Tomu prosím ještě moc nerozumím. Jestli by jste mě to nemohl dokumentovat na následujícím příkladu:
1) Mám v GLADE přes sebe vytvořená dvě okna "windows1" a "windows2", kde "windows1" překrývá "windows2"
2) Mám na "windows1" tlačítko "button1". Stiskem tlačítka "button1" můžu pomocí signálu "clicked / gtk_widget_hide / window1" schovat "window1" a objeví se již ptevřené "windows2"
3) Chci změnu. Chci, aby před po stisku tlačítka "button1" před schováním "window1" proběhly ještě nějaké funkce - nemůžu proto použít zmíněný signál. Nadefinoval jsem proto pro "button1" signál "clicked / on button1_clicked" a v souboru "callbacks.c" se mi objevil odstavec:
void on_button1_clicked (....)
{
tady jsem myslel, že můžu doplnit:
gtk_widget_hide(window1);
}
./autogen.sh přes to sice přeleze, ale "make" mě hází chybu, že "window1" je undeclared. A tady jsem si právě myslel, že deklarece je už provedena v "interface.c"
Děkuju za radu a pokud k tomu víte nějakou dokumentaci (radši v ČJ), tak by to bylo príma, abych Vás pořád neotravoval.
-
Nasel jsem strucny uvod do knihoven GTK+ v cestine: http://www.2k-partner.cz/bobr/article001/index.html
-
Děkuju, díval jsem se na odkaz, něco mě to pomohlo. Ale asi na to koukám ze špatného pohledu (nebo sem blbej) - pořád nevím, jak provést můj příklad, kdy po kliku na tlačítko zmizí vrchní okno a objeví se druhý.
Mohl by jste prosím poradit??
Děkuju
-
V prvni rade podle meho je chybou to, ze vytvarite obe okna naraz. Spise bych po kliku na button1 napsal vytvoreni okna druheho... ;)
-
Ale když vytvořím druhé okno po stisku tlačítka programem, tak budu muset celé druhé okno vytvářet programem a už k tomu nebudu moci využít výhody tvorby pomocí GLADE? Nebo mě něco uniklo?
Nevíte prosím, kde je v programu definována odvolávka na "button1" v "callbacks.c"?
Děkuju
-
Nevíte ještě prosím, jak můžu dohledávat:
on_load_file_dialog_ok_button_clicked
on_defaults_activate
on_defaults_dialog_ok_button_clicked
.
.
.
příkazy s vysvětlením použití?
Děkuju
-
K tomu prvnimu... pomoci Glade si vytvorite druhe okno a ve zdrojovych kodech pote uz jenom premistite prislusny kod tohoto okna a pridate napriklad do obsluhy signalu funkci pro skryti prvniho okna/widgetu.
Zajimavou dokumentaci ke Glade naleznete v balicku glade-doc (http://packages.ubuntu.com/feisty/doc/glade-doc-2).
Na zbytek se mrknu vecer... padim na fotbal. :cool:
-
No konecne jsem se k tomu dostal... :cool:
K ty odvolavce na button1, tak nejak nevim co tim myslite. Jestli signal pozadavku nebo samotnou promennou? Jak jsem jiz rikal, GTK+ je napsano defaultne v jazyku C a ten neni objektove orientovanym jazykem.
Deklarace pointeru na button1 neni globalni, pristupuje se k ni pouze v ramci funkce a musi byt predavana jako parametr. Je to i z duvodu minimalizace naroku na systemove prostredky, jelikoz kazda globalni promenna je zvysuje (je potreba mit alokovanou pamet po celou dobu behu programu, i kdyz neni vyuzita).
K tem signalum co jste uvedl. Obsluha signalu on_load_file_dialog_ok_button_clicked se realizuje tak, ze po vytvoreni dialogu v Glade pridelite signal prave prvku tlacitka OK, specialni signal na cely widget neexistuje. To same u on_defaults_dialog_ok_button_clicked. Co se tyce on_defaults_activate, tak se jedna o nastaveni vychozich hodnot widgetu.
Snad jsem to napsal alespon trochu srozumitelne.
Jinak, neni od veci si napsat par jednoduchych projektu ciste v kodu, bez pouziti Glade. I kdyz je Glade pekna pomucka, vzdy je potreba se v projektu vyznat a s pouzitim Glade se ta orientace dost stezuje...
-
No jeste jednu vec jsem nasel... pokud by jste zkousel psat ty projekty in source mode, tento serial (http://www.linuxsoft.cz/article.php?id_article=370) by vam mohl hodne pomoci. Neni sice primo o GTK+, ale o C/C++, ale je psan velice pekne. ;)
-
Zdravím diwoczaaka - a moc děkuju
Všechny doposavadní dotazy byly z hluboké neznalosti. Ne, že bych tomu už rozumněl, ale je to lepší než na začátku. Pro ostatní, kteří začínají bych pro začátek poradil:
1) GLADE je sice pěknej, ale ze začátku (dokud člověk nerozumí moc kompilaci) to fakt není dobrý, protože není jasné co v kterém file má být. Lepší je rovnou zkusit GTK+, které je v GLADE využíváno.
2) Pro GTK+ doporučuji dokumentaci GTK+, která je v UBUNTU přístupná, ale až po nainstalování "Developers HELP "
3) překlad napsaného programu provedete příkazem: gcc -Wall test `pkg-config --cflags --libs gtk+-2.0` gtk.c
kde gcc je překladač jazyka, nevím co znamená -Wall (ale má to tam prý být), test je název výsledného souboru, v uvozovkách je prý něco co využívá (taky tomu ještě nerozumím a gtk.c je zdrojový kód, který jsem napsal
4) V GLADE jsou příklady, které pomocí překladu z bodu 3) lze překládat a je tam lecos vidět
V každém případě je to dřina.
Ještě jednou děkuju Diwoczaakovi za prvotní kroky.
Kdyby mě někdo dokázal objasnit nejasnosti příkazu při kompilaci (bod 3) bylo by to príma
Přeju všem hezký den
-
K tomu parametru -Wall: Although GCC will compile this code, it isn't strictly complete. If we enable GCC's warnings we will be told what is missing. You are not expected to understand the warning messages right now, we show this only to demonstrate GCC's warnings. You enable warnings by adding the -Wall switch to your compilation command.
V zavorkach je upresneno, ktera knihovna GTK+ ma byt pri kompilaci pouzita. Je to z duvodu, ze v systemu muzou byt verze prvni i druhe rady.
Mimo jine pred paramtrem test vam chybi prepinac -o pro definici vystupu kompilatoru. ;)
Edit: Pri praci s projekty neni od veci se neco malo naucit o tvorbe a vyuziti Makefile. Viz ten serial na ktery jsem poukazoval minule. Da se tim usetrit spoustu casu.