Portál AbcLinuxu, 10. května 2025 06:58

Dotaz: gtk_expander + gtk_tooltips -> problemy s "dedičnosťou"

13.12.2011 16:18 Peter S.
gtk_expander + gtk_tooltips -> problemy s "dedičnosťou"
Přečteno: 188×
Odpovědět | Admin
Ahojte

píšem taký gtk progamik a narazil som na takýto problem:

Mám expander bal_exp a v nom button bal_button a iné widgety.

Na expander som si nasadil tooltip, ktorý funguje. Problém je že daný tooltip sa zobrazuje aj nad vloženými widgetami a konkrétne aj nad menovaným bal_button. A ak priradim tip aj k bal_button, tak mi zobrazí (ku nemu) prazdny tip (predpokladám že "text" s nulovou dlžkov).

Taktiež som si všimol že ked mám v bal_exp vložený hbox, tak v nom vložené widgety už tooltip z expanderu nepreberajú. Alebo je tam ešte nejaké iné pravidlo?

Takže moja otázka je - ako prinútim bal_button aby nepreberal tooltip z bal_exp ale zobrazil iný text?

Napadá ma možnosť dať ho do v|hboxu. Jednoduchšie riešenie by nebolo?

Vďaka

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

13.12.2011 16:24 Peter S.
Rozbalit Rozbalit vše Re: gtk_expander + gtk_tooltips -> problemy s "dedičnosťou"
Odpovědět | | Sbalit | Link | Blokovat | Admin
no škoda že tu nie je edit - musím sa opraviť

Takže štruktúra je taka expander > hbox a widgety v nom preberajú tooltip z expanderu, a nedovolia text zmeniť

a až v hboxe je vbox v ktorom widgety už dovolia pomocou gtk_tooltips_set_tip zmenit text tipu.

Je to zamotané :), sorry
13.12.2011 16:47 l4m4
Rozbalit Rozbalit vše Re: gtk_expander + gtk_tooltips -> problemy s "dedičnosťou"
Odpovědět | | Sbalit | Link | Blokovat | Admin
from gi.repository import Gtk

w = Gtk.Window()
w.connect('destroy', Gtk.main_quit)

e = Gtk.Expander.new('Expand Me!')
e.set_tooltip_text('This is the expander.')
w.add(e)

h = Gtk.Box()
e.add(h)

b = Gtk.Button.new_with_label('Click Me!')
b.set_tooltip_text('This is the button.')
h.add(b)

w.show_all()
Gtk.main()
Toto ti nefunguje, jak má? (Gtk+ 3.2.3)
13.12.2011 17:24 Peter S.
Rozbalit Rozbalit vše Re: gtk_expander + gtk_tooltips -> problemy s "dedičnosťou"

toto je python?

ja to píšem v C. Ak je to python tak výsledok je toto:

 $ python gtkexp.py 
Traceback (most recent call last):
  File "gtkexp.py", line 1, in 
    from gi.repository import Gtk
  File "/usr/lib/python2.7/dist-packages/gi/__init__.py", line 23, in 
    from ._gi import _API, Repository
ImportError: /usr/lib/python2.7/dist-packages/gi/_gi.so: undefined symbol: g_callable_info_skip_return

13.12.2011 18:19 l4m4
Rozbalit Rozbalit vše Re: gtk_expander + gtk_tooltips -> problemy s "dedičnosťou"
Ano, Python. Píšu v obojím, ale v Pythonu jsou příklady přehlednější. Podstatné je, že mi to normálně funguje.

Debian, nebo nějaký derivát? Podle všeho je tam momentálně chaos v závislostech pygobjectu/pygtk...

13.12.2011 18:25 Peter S.
Rozbalit Rozbalit vše Re: gtk_expander + gtk_tooltips -> problemy s "dedičnosťou"
Debian squeze. Môže byť problem aj u mna že mam mixované repozitáre. Stále ked niečo potrebujem nainštalovať, musím riešiť konflikty pomocou aptitude...

Ale aj tak to asi bude problem v gtk a nie so starými alebo mixovanými balíkmi...
13.12.2011 18:49 l4m4
Rozbalit Rozbalit vše Re: gtk_expander + gtk_tooltips -> problemy s "dedičnosťou"
Takže v C (zobáčky si oprav):
#include [gtk/gtk.h]

int
main(int argc, char *argv[])
{
    gtk_init(&argc, &argv);

    GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

    GtkWidget *expander = gtk_expander_new("Expand Me!");
    gtk_widget_set_tooltip_text(expander, "This is the expander.");
    gtk_container_add(GTK_CONTAINER(window), expander);

    GtkWidget *hbox = gtk_hbox_new(FALSE, 0);
    gtk_container_add(GTK_CONTAINER(expander), hbox);

    GtkWidget *button = gtk_button_new_with_label("Click Me!");
    gtk_widget_set_tooltip_text(button, "This is the button.");
    gtk_container_add(GTK_CONTAINER(hbox), button);

    gtk_widget_show_all(window);
    gtk_main();

    return 0;
}
Zkompilovatelné s Gtk+ 2 i 3 a s obojím (2.24.8 a 3.2.2) se chová identicky - správně.
13.12.2011 22:29 Peter S.
Rozbalit Rozbalit vše Re: gtk_expander + gtk_tooltips -> problemy s "dedičnosťou"

nooooo... tak to je zaujímavé, ja používam toto: http://developer.gnome.org/gtk/2.24/GtkTooltips.html a tu ked to čítam sa píše:

GtkTooltips has been deprecated in GTK+ 2.12, in favor of the new GtkTooltip API.

a ukazuje to tu: http://developer.gnome.org/gtk/2.24/GtkTooltip.html . Citujem:

Basic tooltips can be realized simply by using gtk_widget_set_tooltip_text()

No je to čo ty používaš. Takže zajtra sa na to pôjdem a asi to celé prerobím.... A myslím že tým pádom je to asi vyriešené...

14.12.2011 09:17 Peter S.
Rozbalit Rozbalit vše ten istý efekt
Takže prišiel som na to, že aj tu sa prejavuje "dedičnosť"

Dopln si do tvojho kodu další button, napríklad takto:
GtkWidget *button2 = gtk_button_new_with_label("Or Me!");
gtk_container_add(GTK_CONTAINER(hbox), button2);
A ked na neho nabehneš myšou tak sa tam objavi tip z expanderu
14.12.2011 10:50 l4m4
Rozbalit Rozbalit vše Re: ten istý efekt
Aha, už asi chápu, o co ti jde. Pokud chceš nastavit tooltip tomu nápisu na expanderu, nikoli celému expanderu, tak to taky musíš udělat - viz gtk_expander_get_label_widget().
13.12.2011 18:29 Peter S.
Rozbalit Rozbalit vše Re: gtk_expander + gtk_tooltips -> problemy s "dedičnosťou"

inak to mam 3x python 2.5 , 2.6 a 2.7. Toto hore bolo z defaultného pythona, teda asi 2.7, verzia 2.5 dáva toto:

 

$ python2.5 gtkexp.py 
Traceback (most recent call last):
File "gtkexp.py", line 1, in <module>
from gi.repository import Gtk
ImportError: No module named gi.repository
13.12.2011 23:09 pozortucnak | skóre: 21 | blog: vecny_windowsar
Rozbalit Rozbalit vše Re: gtk_expander + gtk_tooltips -> problemy s "dedičnosťou"
Odpovědět | | Sbalit | Link | Blokovat | Admin
Potencionálně trapný dotaz...

Proč jsou v GTK všechny GUI prvky typu GtkWidget? Nebylo by přehlednější mít window, expander, hbox, button...
Jsem mimořádně obtížný případ
13.12.2011 23:26 Peter S.
Rozbalit Rozbalit vše Re: gtk_expander + gtk_tooltips -> problemy s "dedičnosťou"
no prečo musi byť x,y,z typu int a nemôžu byť rovno x,y,z??

proste to gtk asi musí vedieť aká štruktura nasleduje v pamäti na pozícii (povedzme) 12345678

aspon tak to chápem ja ako amatersky programátor :)
13.12.2011 23:45 l4m4
Rozbalit Rozbalit vše Re: gtk_expander + gtk_tooltips -> problemy s "dedičnosťou"
Však ony jsou různých typů - akorát konstruktory widgetů jsou deklarovány s návratovým typem GtkWidget*, tj. bázové třídy. Nejspíš proto, že to tak kdosi kdysi deklaroval a už to tak zůstalo. Takže se takhle často deklarují i proměnné. Lze to dělat i naopak, mít proměnné konkrétních pointerových typů a přetypovávat dolů. Přetypovávat se ale někam musí kvůli C často tak jako tak.
14.12.2011 00:02 Peter S.
Rozbalit Rozbalit vše Re: gtk_expander + gtk_tooltips -> problemy s "dedičnosťou"

ešte doplnil, štruktúra widgetov nie je dvojurovnova ale je to dost rozvetvený strom, napríklad:

+ GtkWidget
+----GtkContainer
+----GtkBox
+----GtkVBox
+----GtkFileChooserWidget

a každý "parent" ma spravidla viac childov. V tomto príklade uvádzam stale len jeden child...

 

sice nový pointer je definovaný ako gtkwidget * , ale samotný widget sa tvorí funkciou v tomto prípade:

 

gtk_file_chooser_widget_new()

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.