Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: GLADE - nové okno po stisku tlačítka  (Přečteno 9529 krát)

chessx

  • Aktivní člen
  • *
  • Příspěvků: 221
GLADE - nové okno po stisku tlačítka
« kdy: 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

Pavel Půlpán

GLADE - nové okno po stisku tlačítka
« Odpověď #1 kdy: 22 Srpna 2007, 14:27:32 »
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/

chessx

  • Aktivní člen
  • *
  • Příspěvků: 221
GLADE - nové okno po stisku tlačítka
« Odpověď #2 kdy: 22 Srpna 2007, 14:50:34 »
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.

Pavel Půlpán

GLADE - nové okno po stisku tlačítka
« Odpověď #3 kdy: 22 Srpna 2007, 14:52:07 »
No je to Cecko... tudiz bych to videl na #include "wokno2.h".

chessx

  • Aktivní člen
  • *
  • Příspěvků: 221
GLADE - nové okno po stisku tlačítka
« Odpověď #4 kdy: 22 Srpna 2007, 15:20:46 »
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.

Pavel Půlpán

GLADE - nové okno po stisku tlačítka
« Odpověď #5 kdy: 22 Srpna 2007, 15:28:37 »
Ono ale "window2" memi opravdu definovany (ani deklarovany). :)

Neni nahodou definice umistena v tele funkce create_windowX()???

chessx

  • Aktivní člen
  • *
  • Příspěvků: 221
GLADE - nové okno po stisku tlačítka
« Odpověď #6 kdy: 22 Srpna 2007, 15:38:14 »
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.

Pavel Půlpán

GLADE - nové okno po stisku tlačítka
« Odpověď #7 kdy: 22 Srpna 2007, 15:43:59 »
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();

chessx

  • Aktivní člen
  • *
  • Příspěvků: 221
GLADE - nové okno po stisku tlačítka
« Odpověď #8 kdy: 22 Srpna 2007, 17:04:23 »
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.

Pavel Půlpán

GLADE - nové okno po stisku tlačítka
« Odpověď #9 kdy: 22 Srpna 2007, 17:49:56 »
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.

chessx

  • Aktivní člen
  • *
  • Příspěvků: 221
GLADE - nové okno po stisku tlačítka
« Odpověď #10 kdy: 22 Srpna 2007, 18:03:54 »
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

Pavel Půlpán

GLADE - nové okno po stisku tlačítka
« Odpověď #11 kdy: 22 Srpna 2007, 18:18:44 »
Jo tak... hlavickovy soubory GTK+ chybeji. ;)

Aby sli ty priklady z tutorialu sestavit, je nutne doinstalovat:
Kód: [Vybrat]
sudo apt-get install libgtk2.0-dev libglib2.0-dev

chessx

  • Aktivní člen
  • *
  • Příspěvků: 221
GLADE - nové okno po stisku tlačítka
« Odpověď #12 kdy: 22 Srpna 2007, 20:59:28 »
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

Pavel Půlpán

GLADE - nové okno po stisku tlačítka
« Odpověď #13 kdy: 22 Srpna 2007, 21:02:09 »
A zadal jste dobre parametry kompilatoru?
Kód: [Vybrat]
gcc vstup.c -o vystup `pkg-config --cflags --libs gtk+-2.0`

chessx

  • Aktivní člen
  • *
  • Příspěvků: 221
GLADE - nové okno po stisku tlačítka
« Odpověď #14 kdy: 23 Srpna 2007, 11:59:30 »
zadal - ty byly v příkladu taky

Pavel Půlpán

GLADE - nové okno po stisku tlačítka
« Odpověď #15 kdy: 23 Srpna 2007, 12:16:02 »
Tak v cem udelali soudruzi z NDR chybu? :/

chessx

  • Aktivní člen
  • *
  • Příspěvků: 221
GLADE - nové okno po stisku tlačítka
« Odpověď #16 kdy: 23 Srpna 2007, 12:54:42 »
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??

Pavel Půlpán

GLADE - nové okno po stisku tlačítka
« Odpověď #17 kdy: 23 Srpna 2007, 14:39:04 »
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

chessx

  • Aktivní člen
  • *
  • Příspěvků: 221
GLADE - nové okno po stisku tlačítka
« Odpověď #18 kdy: 23 Srpna 2007, 16:53:56 »
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.

Pavel Půlpán

GLADE - nové okno po stisku tlačítka
« Odpověď #19 kdy: 23 Srpna 2007, 17:01:54 »
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:
Kód: [Vybrat]
sudo apt-get install libglade libglade-devA tyto navic s podporou Gnome widgetu:
Kód: [Vybrat]
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)

chessx

  • Aktivní člen
  • *
  • Příspěvků: 221
GLADE - nové okno po stisku tlačítka
« Odpověď #20 kdy: 23 Srpna 2007, 20:45:48 »
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?

chessx

  • Aktivní člen
  • *
  • Příspěvků: 221
GLADE - nové okno po stisku tlačítka
« Odpověď #21 kdy: 23 Srpna 2007, 20:59:44 »
mám ale nainstalováno libglade2-0 a libglade2-dev

nestačí to??

Pavel Půlpán

GLADE - nové okno po stisku tlačítka
« Odpověď #22 kdy: 24 Srpna 2007, 11:47:27 »
Moje chyba... jsou to ty balicky co jste napsal vy, pripadne libglade0 a libglade0-dev. Stale to hazi tu samou chybu?

chessx

  • Aktivní člen
  • *
  • Příspěvků: 221
GLADE - nové okno po stisku tlačítka
« Odpověď #23 kdy: 24 Srpna 2007, 16:28:41 »
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

Pavel Půlpán

GLADE - nové okno po stisku tlačítka
« Odpověď #24 kdy: 27 Srpna 2007, 16:56:11 »
Po pridani signalu prvku a vygenerovani projektu v callbacks.c prida funkce pro obsluhu.
Takze napriklad pro obsluhu prvku tridy *button:
Kód: [Vybrat]
void on_button1_clicked(GtkButton *button,gpointer user_data)
{
  ;
}
Do jejiho tela pridate vlastni obsuhu funkce a je to...

 

Provoz zaštiťuje spolek OpenAlt.