Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1426 Le 21/04/2011, à 16:53

Elzen

Re : /* Topic des codeurs couche-tard [4] */

Bah, il c'est de l'ajout dans un gtk.Notebook à peu près classique… avec quelques petites subtilités, vu qu'il s'agit d'une barre d'onglet qui liste les différents bureaux, donc qui n'est destinée à afficher que les onglets eux-même et pas le contenu qu'ils représentent…

Le code actuel donne ça :

# Ajoute un nouvel onglet.
def add_tab(screen, workspace):
    name,icon = get_default_infos(tabs.get_n_pages())
    hbox = gtk.HBox(False, 2)
    hbox.set_size_request(-1, 17)
    evbox = gtk.EventBox()
    evbox.add(gtk.image_new_from_pixbuf(icon))
    evbox.set_visible_window(False)
    evbox.connect("button-press-event", show_menu)
    hbox.pack_start(evbox, False, False)
    evbox = gtk.EventBox()
    evbox.set_visible_window(False)
    evbox.connect("button-press-event", switch_ws)
    label = gtk.Label(name)
    label.set_tooltip_text(name)
    label.set_alignment(0.5, 0.5)
    evbox.add(label)
    hbox.add(evbox)
    button = gtk.Button()
    button.set_image(gtk.image_new_from_pixbuf(
        gtk.icon_theme_get_default().load_icon(
        "window-close", 16, gtk.ICON_LOOKUP_USE_BUILTIN)))
    button.set_relief(gtk.RELIEF_NONE)
    hbox.pack_end(button, False, False)
    page = gtk.Label()
    tabs.append_page(page, hbox)
    tabs.child_set_property(page, "tab-expand", True)
    hbox.show_all()
    page.show()

En version vraiment classique, ça donnerait quelque chose comme :

# Ajoute un nouvel onglet.
def add_tab(name, icon, page):
    # Création de la boîte de composants.
    hbox = gtk.HBox(False, 2)
    # Icône affichant un menu.
    evbox = gtk.EventBox()
    evbox.add(gtk.image_new_from_pixbuf(icon))
    evbox.set_visible_window(False)
    evbox.connect("button-press-event", show_menu)
    hbox.pack_start(evbox, False, False)
    # Étiquette de l'onglet.
    label = gtk.Label(name)
    label.set_tooltip_text(name)
    label.set_alignment(0.5, 0.5)
    hbox.add(label)
    # Création du bouton de fermeture
    # FIXME Le problème est là.
    button = gtk.Button()
    button.set_image(gtk.image_new_from_pixbuf(
        gtk.icon_theme_get_default().load_icon(
        "window-close", 16, gtk.ICON_LOOKUP_USE_BUILTIN)))
    button.set_relief(gtk.RELIEF_NONE)
    hbox.pack_end(button, False, False)
    # Ajout de l'onglet à la liste.
    # « tabs » est le gtk.Notebook utilisé.
    tabs.append_page(page, hbox)
    hbox.show_all()
    page.show_all()

(La fonction destinée à fermer l'onglet n'est pas encore affectée au bouton, vu que j'attends de voir si je vais réussir à faire un truc correct avant de l'écrire, si c'est trop moche je ferai autrement).

Hors ligne

#1427 Le 21/04/2011, à 18:11

Rolinh

Re : /* Topic des codeurs couche-tard [4] */

Arf, et moi qui justement galère avec GTK+ en ce moment...

Hors ligne

#1428 Le 21/04/2011, à 18:37

xapantu

Re : /* Topic des codeurs couche-tard [4] */

@ArkSeth : je ne sais pas si ça te va, je n'ai pas beaucoup testé tongue

import  pygtk
import gtk 

win = gtk.Window()
win.show_all()

tabs = gtk.Notebook()
image = gtk.Image()
image.set_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_SMALL_TOOLBAR)
button = gtk.Button()
button.set_relief(gtk.RELIEF_NONE)
#button.set_focus_click(false)
button.add(image)
style = gtk.RcStyle()
style.xthickness = 0 
style.ythickness = 0 
button.modify_style(style)
button.set_size_request(15,15)
hbox = gtk.HBox()
hbox.pack_start(gtk.Label("aaa"))
hbox.pack_start(button)
hbox.show_all()
win.add(tabs)
tabs.append_page(gtk.Label("aaa"), hbox)
win.show_all()

gtk.main()

@Rolinh : arf, c'est très bien gtk tongue

Dernière modification par xapantu (Le 21/04/2011, à 18:39)

Hors ligne

#1429 Le 21/04/2011, à 19:14

Rolinh

Re : /* Topic des codeurs couche-tard [4] */

xapantu a écrit :

@Rolinh : arf, c'est très bien gtk tongue

Peut-être mais j'ai vraiment du mal à me mettre dans leur logique. Je dois être bête mais il y a des trucs qui m'échappent à propos des tree view...

Dernière modification par Rolinh (Le 21/04/2011, à 19:15)

Hors ligne

#1430 Le 21/04/2011, à 19:50

Elzen

Re : /* Topic des codeurs couche-tard [4] */

Rolinh a écrit :

Je dois être bête mais il y a des trucs qui m'échappent à propos des tree view...

C'est vrai que j'ai galéré aussi à chaque fois que j'ai essayé de me servir des tree view… mais comme finalement, c'était pas nécessairement le plus adapté dans ces quelques cas, je n'ai jamais vraiment regardé sérieusement.

xapantu a écrit :

@ArkSeth : je ne sais pas si ça te va, je n'ai pas beaucoup testé tongue

Bien vu, le coup de style, j'aurais dû creuser un peu plus par là ^^

Par contre, en utilisant « button.add(image) » comme tu le fais, l'image est toujours rognée… et curieusement, avec « button.set_image(image) », elle s'affiche à peu près intacte, mais déborde du bouton yikes

Finalement, j'ai pris

button = gtk.Button()
button.set_image(gtk.image_new_from_pixbuf(
    gtk.icon_theme_get_default().load_icon(
    "window-close", 16, gtk.ICON_LOOKUP_USE_BUILTIN)))
style = gtk.RcStyle()
style.xthickness = 0
style.ythickness = 0
button.modify_style(style)
button.set_size_request(22, 17)
button.set_relief(gtk.RELIEF_NONE)

C'est pas encore aussi parfait que dans les logiciels sus-cités, je trouve que ça rend plutôt pas mal. D'ailleurs, mes onglets sont légèrement plus fins que les onglets ordinaires, ça doit être pour ça.

Mon bouton reste plus large que haut, mais d'un autre côté, mon manque de place, c'est en hauteur, pas en largeur.

Edit : ah, et sinon, si je génère l'image depuis STOCK_CLOSE, même en précisant explicitement 16 ou moins comme taille, j'ai une croix plus grosse que ça yikes

Merci beaucoup big_smile

Dernière modification par ArkSeth (Le 21/04/2011, à 19:53)

Hors ligne

#1431 Le 21/04/2011, à 21:01

xapantu

Re : /* Topic des codeurs couche-tard [4] */

Le problème des treeview, c'est que c'est compliqué... mais l'intérêt c'est qu'on peut faire des trucs compliqués tongue :
1303412413.png (ce n'est pas de moi tongue )

On peut mettre tout ce qu'on veut après dedans grâce aux cellrender... et ça gère le tri et tout ça...

Dernière modification par xapantu (Le 21/04/2011, à 22:04)

Hors ligne

#1432 Le 21/04/2011, à 21:12

Rolinh

Re : /* Topic des codeurs couche-tard [4] */

tongue
En fait, je cherche à faire un truc tout simple:
je suis en train d'écrire un gestionnaire de copie et j'ai trois onglets, dans lesquels j'aimerais pouvoir "outputer" des informations à propos des copies (Source, Destination, Taille seraient les entêtes de colonnes). Seulement voilà, je n'ai pas encore trouvé comment. Mais si tu sais où me guider, c'est avec plaisir smile

EDIT: une image, c'est plus parlant wink
1303413442.png
J'ai donc mes trois onglets dans lesquels j'aimerais mettre une liste avec les trois colonnes précitées et pouvoir outputer des choses là-dedans.

En fait, pour préciser un peu, j'ai apparemment pu mettre des choses dans la liste mais... cela ne s'affiche pas. Difficile à expliquer mais je peux sélectionner une ligne mais rien n'y est écrit.

Dernière modification par Rolinh (Le 21/04/2011, à 21:18)

Hors ligne

#1433 Le 21/04/2011, à 22:18

xapantu

Re : /* Topic des codeurs couche-tard [4] */

D'après ce que je sais, il faut d'abord créer un GtkTreeModel, et seulement ensuite un GtkTreeView smile

J'essayerais de te faire un exemple demain (sauf si tu as trouvé), là, je vais dormir tongue

Hors ligne

#1434 Le 21/04/2011, à 22:32

Rolinh

Re : /* Topic des codeurs couche-tard [4] */

Je vais aussi aller me coucher wink

Ouep, je te redis si jamais je n'ai pas trouvé. Merci pour le coup de main.

Hors ligne

#1435 Le 21/04/2011, à 23:12

The Uploader

Re : /* Topic des codeurs couche-tard [4] */

git stash plop!

Et sinon aujourd'hui et hier c'était DOTNET, et génie logiciel (vive la version Java de Rails : Play! Framework (ça utilise la JVM d'Eclipse, un peu de Python, Groovy, et le modèle MVC, toussa...) smile et vive gitorious!). smile

Demain, j'ai 4 heures de BDD........................ ENCORE des triggers, procédures stockés, et DBA sous Oracle XE! MARRE! >_<

Dernière modification par The Uploader (Le 21/04/2011, à 23:20)


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#1436 Le 21/04/2011, à 23:40

Elzen

Re : /* Topic des codeurs couche-tard [4] */

Bon, j'ai un autre problème… avec wnck, maintenant.

Je voudrais créer un nouveau bureau et ensuite y déplacer une fenêtre.

Seulement, les méthodes permettant d'agir sur les bureaux/fenêtres sont asynchrones : python envoie l'ordre et passe à la suite aussitôt sans attendre que le gestionnaire de fenêtre ait réagit. Du coup, je ne peux déplacer la fenêtre que sur les bureaux qui étaient déjà là avant que je crée le nouveau.

J'pourrais probablement m'en arranger avec une fonction qui se relance avec gobject.timeout_add() jusqu'à ce que le traitement ait été effecuté, mais dans l'état actuel du truc, je pense que ce serait un peu compliquer pour pas grand chose : ce serait plus simple si j'arrivais juste à bloquer le déroulement de la fonction courante en attendant que le gestionnaire de fenêtres ait réagit.

J'ai essayé, à tout hasard et sans grande conviction, avec

while (screen.get_workspace_count() != newnum):
    time.sleep(0.1)

voire même, encore plus moche, avec

while (screen.get_workspace_count() != newnum):
    pass

mais dans l'un comme dans l'autre de ces deux cas, screen.get_workspace_count() n'est pas mis à jour et j'me retrouve avec une boucle infinie.

Verriez-vous par hasard une autre manière de procéder ?

Edit :

The Uploader a écrit :

Demain, j'ai 4 heures de BDD........................ ENCORE des triggers, procédures stockés, et DBA sous Oracle XE! MARRE! >_<

Je compatis. Moi j'suis en vacances (enfin, en théorie, j'ai passé la semaine à la fac quand même pour bosser les projets à rendre, vu que c'est en groupe et que donc j'peux pas le faire tranquille chez moi), mais j'ai TP noté sur ça à la rentrée.
Ceci dit, à part le fait que Oracle çapuesaypaslibre et que c'est beaucoup moins fun qu'avec un vrai SGBD comme PostgreSQL, j'trouve ça plutôt marrant.

Dernière modification par ArkSeth (Le 21/04/2011, à 23:44)

Hors ligne

#1437 Le 21/04/2011, à 23:43

The Uploader

Re : /* Topic des codeurs couche-tard [4] */

voire même

"voire" [OU] "même". Sinon, c'est un pléonasme. wink

Bonne nuit. smile


- Oldies PC : Intel Pentium 3 @ 800 Mhz sur CM ASUS P2B-F, GeForce 4 Ti4800 SE, Disque Dur Hitachi 160 Go, 512 Mo de RAM, 3DFX Voodoo 2, Sound Blaster 16 ISA PnP, Windows 98 SE / XP)
- Desktop : Intel Core i7 6700K @ 4 GHz sur CM ASUS Z170-P, GeForce GTX 1070, SSD Samsung 850 EVO 1 To, 16 Go de RAM, Disque Dur Seagate Barracuda 3 To, Windows 10

Hors ligne

#1438 Le 21/04/2011, à 23:46

Elzen

Re : /* Topic des codeurs couche-tard [4] */

Le pléonasme n'est pas une faute de français, et est même un procédé d'insistance tout ce qu'il y a de plus recevable tongue

Hors ligne

#1440 Le 22/04/2011, à 00:46

samυncle

Re : /* Topic des codeurs couche-tard [4] */

.


Hello world

Hors ligne

#1441 Le 22/04/2011, à 01:02

Elzen

Re : /* Topic des codeurs couche-tard [4] */

Bon, en fait j'ai recodé ça autrement pour que ce soit géré par mon événementiel.

Par contre, dans la situation inverse (pour fermer un bureau, j'veux fermer les fenêtres qui sont dessus, et je les démaximise avant de les fermer, ç'plus propre), j'ai besoin de rien récupérer, juste d'attendre que ce soit fait, donc j'ai mis un time.sleep(0.2) tout seul, sans boucle autour (étant donné que je veux démaximiser toutes les fenêtres maximisées présentes sur ce bureau, puis fermer toutes les fenêtres présentes sur ce bureau, puis fermer le bureau lui-même, ce serait vraiment trop galère de faire autrement).

Y a une méthode force_update() dans wnck.Screen, en plus, mais elle ne sert qu'à mettre à jour la liste des fenêtres, elle ne touche apparemment pas à celle des bureaux ou aux propriétés des fenêtres. C'est quand même naze.

Bon, sur ce, j'me lève bientôt, donc j'vais peut-être arrêter de coder et aller me coucher. Bonne nuit.

Dernière modification par ArkSeth (Le 22/04/2011, à 01:02)

Hors ligne

#1442 Le 22/04/2011, à 01:48

Кຼزດ

Re : /* Topic des codeurs couche-tard [4] */

The Uploader a écrit :

voire même

"voire" [OU] "même". Sinon, c'est un pléonasme. wink

C'est pas un pléonasme, juste une faute de français.


dou

Hors ligne

#1443 Le 22/04/2011, à 02:02

nesthib

Re : /* Topic des codeurs couche-tard [4] */

plop


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#1444 Le 22/04/2011, à 02:21

Sir Na Kraïou

Re : /* Topic des codeurs couche-tard [4] */

!grenade


Descendant de Charlemagne et de LUCA.
Bleu, en l'hommage d'un truc bleu. :'(
C'est pas du bleu.
C'est pas le lac de Genève, c'est le Lac Léman.

Hors ligne

#1445 Le 22/04/2011, à 02:40

Pylades

Re : /* Topic des codeurs couche-tard [4] */

.


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#1446 Le 22/04/2011, à 07:42

Compteur du TdCCT

Re : /* Topic des codeurs couche-tard [4] */

Scores totaux, depuis le début :

1) 3096    nesthib
2) 2857    samuncle
3) 2451    Pylade
4) 1981    Кຼزດ
5) 1675+5  grim7reaper /* ./viewtopic.php?pid=3486252#p3486252 */
6) 1501    cm-t
7) 1106    :mad: ✰ :бешеный: ✰ :mad:
8) 858    helly
9) 844    \\Ouranos//
10) 659    gnuuat
11) 559    Lagierl
12) 522    tshirtman
13) 354    Rolinh
14) 284    The Uploader
15) 231    Kanor
16) 212    nathéo
17) 196    Askelon
18) 145    :!pakman
19) 121    ǤƦƯƝƬ
20) 93    petifrancais
21) 91    kamui57
22) 78    edge_one
22) 78    pierguiard
24) 70    gulp
25) 39    Le Rouge
26) 37    ilagas
27) 32    sakul
27) 32    xapantu
29) 30    keny
30) 26    gustare
30) 26    d10g3n
32) 25    GentooUser
32) 25    Morgiver
34) 24    ไ୦บเઢ'
34) 24    Steap
36) 20    CROWD
37) 18    Ph3nix_
38) 16    kouskous
39) 15    timsy
40) 12    stratoboy
40) 12    sailing
42) 11    alexises
42) 11    Crocoii
44) 10    Toineo
44) 10    NutMotion
44) 10    pseudovingtcinqcaracteres
44) 10    pfriedZ
44) 10    CasseTaTele
44) 10    Zeibux
50) 8    Mornagest
51) 7    Vista
52) 6    ubuntlin
52) 6    asma.geek
54) 5    tendances-tdct
54) 5    kinouchou
56) 4    danychou56
56) 4    Neros
56) 4    Biaise
56) 4    totoflute
56) 4    pinballyoda ㋛
56) 4    NLS le pingouin
56) 4    ceric
56) 4    Dice-Man
64) 3    Revan26914
64) 3    raspouillas
66) 2    SoJaS
67) 1    geenux

RépartitionPosts/heure


Codez-vous trop tard le soir ?
Demandez au Compteur du TdCCT pour le savoir !

J’ai été généreusement codé par tshirtman ; d’ailleurs, voici mon code source. TdCCT CEP : ./viewtopic.php?pid=3493579#p3493579 (p3492608).

Hors ligne

#1447 Le 22/04/2011, à 07:42

Compteur du TdCCT

Re : /* Topic des codeurs couche-tard [4] */

Scores de la période en cours :

1) 176    nesthib
2) 156    samuncle
3) 120    Pylade
4) 89    Кຼزດ
5) 86    cm-t
6) 81    :mad: ✰ :бешеный: ✰ :mad:
7) 47    Rolinh
8) 40    nathéo
9) 34    tshirtman
10) 33    :!pakman
11) 32    \\Ouranos//
12) 27    The Uploader
13) 23    grim7reaper
14) 20    sakul
15) 10    helly
16) 5    kamui57
17) 4    Dice-Man
18) 3    raspouillas
19) 2    kouskous
19) 2    xapantu

Codez-vous trop tard le soir ?
Demandez au Compteur du TdCCT pour le savoir !

J’ai été généreusement codé par tshirtman ; d’ailleurs, voici mon code source. TdCCT CEP : ./viewtopic.php?pid=3493579#p3493579 (p3492608).

Hors ligne

#1448 Le 22/04/2011, à 11:25

xapantu

Re : /* Topic des codeurs couche-tard [4] */

Rolinh a écrit :

tongue
En fait, je cherche à faire un truc tout simple:
je suis en train d'écrire un gestionnaire de copie et j'ai trois onglets, dans lesquels j'aimerais pouvoir "outputer" des informations à propos des copies (Source, Destination, Taille seraient les entêtes de colonnes). Seulement voilà, je n'ai pas encore trouvé comment. Mais si tu sais où me guider, c'est avec plaisir smile

EDIT: une image, c'est plus parlant wink
[...]
J'ai donc mes trois onglets dans lesquels j'aimerais mettre une liste avec les trois colonnes précitées et pouvoir outputer des choses là-dedans.

En fait, pour préciser un peu, j'ai apparemment pu mettre des choses dans la liste mais... cela ne s'affiche pas. Difficile à expliquer mais je peux sélectionner une ligne mais rien n'y est écrit.

Je viens de faire ça :
1303464255.png
Le code :

#include <gtk/gtk.h>

/* Là tu mets les différentes columnes */
enum
{
    SOURCE_COLUMN,
    DESTINATION_COLUMN,
    SIZE_COLUMN,
    N_COLUMN
};

GtkTreeStore* create_store(void)
{
    /* Le TreeStore, c'est le modèle */
    GtkTreeStore* store = gtk_tree_store_new(N_COLUMN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
    return store;
}
GtkWidget* create_tree_view(GtkTreeStore* store)
{

    /* Le vrai widget */

    GtkWidget* treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));

    /* Les trois colonnes */
    GtkTreeViewColumn* column;
    GtkCellRenderer* render;

    render = gtk_cell_renderer_text_new();
    column = gtk_tree_view_column_new_with_attributes("Source", render, "text", SOURCE_COLUMN, NULL);
    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);

    /* Après, c'est la même chose pour les autres colonnes */
    render = gtk_cell_renderer_text_new();
    column = gtk_tree_view_column_new_with_attributes("Destination", render, "text", DESTINATION_COLUMN, NULL);
    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);

    render = gtk_cell_renderer_text_new();
    column = gtk_tree_view_column_new_with_attributes("Size", render, "text", SIZE_COLUMN, NULL);
    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column);

    return treeview;
}

void add_data(GtkTreeStore* store, gchar* source, gchar* destination, gint size)
{
    GtkTreeIter iter;

    gtk_tree_store_append(store, &iter, NULL);

    gtk_tree_store_set(store, &iter, SOURCE_COLUMN, source, DESTINATION_COLUMN, destination, SIZE_COLUMN, size, -1);
}

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

    GtkWidget* win = gtk_window_new(0);
    gtk_widget_show_all(win);

    GtkTreeStore* store = create_store();
    GtkWidget* treeview = create_tree_view(store);
    add_data(store, "/", "/home", 42);
    add_data(store, "/usr", "/mnt/", 101010);

    gtk_container_add(GTK_CONTAINER(win), treeview);
    gtk_widget_show_all(win);

    gtk_main();
    return 0;
}

Pour compiler :

gcc main.c -o main `pkg-config gtk+-2.0 --libs --cflags` -Wall

C'est découpé en plusieurs fonctions, évidement tu peux tout mettre dans une seule, mais comme ça, tu peux peut-être plus facilement réutiliser le code dans ton logiciel smile


Après, tu peux facilement ajouter des fonctions pratiques du genre le redimensionnement des colonnes, le tri, ou encore l'affichage d'une icône à côté du fichier que tu veux copier smile

(ah, et, faut fermer avec Ctrl+C, j'avais la flemme...)

Dernière modification par xapantu (Le 22/04/2011, à 11:30)

Hors ligne

#1449 Le 22/04/2011, à 11:32

helly

Re : /* Topic des codeurs couche-tard [4] */


plop.


Archlinux-wmii-dwb.
Un problème résolu ? Faites le savoir en mettant [résolu] à côté du titre de votre topic.
Un problème non résolu ? Faites le savoir en insultant ceux qui cherchent à vous aider.
Un site bleu super remasterised©, un wiki cherchant des volontaires pour traduire un site.

Hors ligne

#1450 Le 22/04/2011, à 20:32

Rolinh

Re : /* Topic des codeurs couche-tard [4] */

@ xapantu: wouaaa, ça c'est de la réponse! smile
Merci vraiment beaucoup d'avoir pris de ton temps pour ça.
Je pense que je vais finir par comprendre la logique GTK mais l'instant j'ai un peu de mal.

Hors ligne