Bonjour,

J'aimerai remplacer un widget de type gtk.Button par un autre du type gtk.Image au sein d'une table. Je pense avoir trouver la manière de procéder mais le résultat est vraiment aléatoire ... Le gtk.Image ne s'affiche forcément....

Voici le fichier glade et le programme ci-dessous

Pour info, gazpacho est nécessaire pour faire fonctionner ce programme

Le programme est simple, quand vous cliquez sur l'un des trois boutons (button5, button6, button7), le bouton est supprimé et une image doit apparaitre .....

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 
# -*- coding: utf-8 -*-
import pygtk
pygtk.require('2.0')
import gtk
from gazpacho.loader.loader import ObjectBuilder
 
class Window:
    def __init__(self):
        self.wt = ObjectBuilder('test-table.glade')
        self.window = self.wt.get_widget('window')
        signals = {"on_button_close_clicked" : self.on_button_close_clicked,
                   "on_button5_clicked" : self.on_button5_clicked,
                   "on_button6_clicked" : self.on_button6_clicked,
                   "on_button7_clicked" : self.on_button7_clicked}
        self.wt.signal_autoconnect(signals)
 
    def on_button5_clicked(self, widget):
        self.test("button5")
 
    def on_button6_clicked(self, widget):
        self.test("button6")
 
    def on_button7_clicked(self, widget):
        self.test("button7")
 
    def on_button_close_clicked(self, widget):
        gtk.main_quit()
 
    def test(self, str):
        table = self.wt.get_widget('table1')
        children = table.get_children()
        # img va remplacer le bouton
        img = gtk.Image()
        img.set_from_stock(gtk.STOCK_YES,5)
        cpt=0
        for child in children:
            if isinstance(child, gtk.Button) and child.get_label() == str:
                table.remove(child)
                table.attach(img,1,2,cpt,cpt+1)
            cpt+=1
            self.window.show_all()
 
if __name__ == "__main__":
    win = Window()
    win.window.show()
    gtk.main()
Je n'arrive pas à comprendre le caractère aléatoire du problème.

Une idée ?