Bonjour,
dans la conception d’un logiciel avec GTK3 et Python3, je me dois d’interagir avec un drawing area via des boutons, j’ai donc pensé mettre les boutons et mon aire de dessin dans un Fixed, j’ai bien tous mes boutons d’affiché mais pas le drawing area qui est poutant bien présent sur la fenêtre (on peut le deviner car la fenêtre s’agrandit quand je le déplace), il est donc juste pas visible. J’ai essayé d’ajouter des "show_all" et des "queue_draw" un peu partout mais rien n’y fait. Une idée de comment régler ce problème ?
Merci d’avance !
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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | from gi.repository import Gtk, Gdk import cairo class MyWindow(Gtk.Window): def __init__(self, modifiable): super(MyWindow, self).__init__() self.width, self.height = 120,20 self.modifiable = modifiable self.init_ui() def init_ui(self): self.set_title("Test Rectangle Move") self.resize(600, 400) self.set_position(Gtk.WindowPosition.CENTER) self.darea = Gtk.DrawingArea() self.darea.connect("draw", self.on_draw) self.darea.set_events(Gdk.EventMask.BUTTON_PRESS_MASK | Gdk.EventMask.POINTER_MOTION_MASK) self.darea.connect("button-press-event", self.on_button_press) self.darea.show_all() self.darea.connect("delete-event", Gtk.main_quit) self.fixed = Gtk.Fixed() self.fixed.put(self.darea,0,0) self.add(self.fixed) self.show_all() self.rects = [rectangle(20,10,50,80), rectangle(100,10,70,80)] def on_draw(self, wid, cr): cr.set_source_rgb(255,0, 0) #cr.set_line_width(0.5) cr.fill() for rect in self.rects: if rect.isSelected: cr.set_source_rgb(0,255, 0) if rect.is2Selected: cr.set_source_rgb(0,0, 255) cr.rectangle(rect.position[0], rect.position[1], rect.width, rect.height) cr.fill() cr.stroke() if rect.isSelected or rect.is2Selected: cr.set_source_rgb(255,0, 0) def on_mouse_bg(self, w, e): if self.modifiable: for rect in self.rects: if rect.isSelected: rect.npos(e.x) elif rect.is2Selected: rect.nwidth(e.x) self.darea.queue_draw() def on_button_press(self, w, e): if e.type == Gdk.EventType.BUTTON_PRESS \ and e.button == MouseButtons.LEFT_BUTTON: for rect in self.rects: if rect.contient(e.x, e.y): rect.select() else: rect.unselect() self.darea.queue_draw() if e.type == Gdk.EventType.BUTTON_PRESS \ and e.button == MouseButtons.RIGHT_BUTTON: for rect in self.rects: if rect.contient(e.x, e.y): rect.select2() else: rect.unselect2() self.darea.queue_draw() class rectangle(object): def __init__(self, posX, posY, width, height): super(rectangle, self).__init__() self.width = width self.height= height self.position = [posX,posY] self.isSelected = False self.is2Selected = False def select(self): self.isSelected = True def select2(self): self.is2Selected = True def unselect(self): self.isSelected = False def unselect2(self): self.is2Selected = False def nwidth(self, posX): if (self.position[0] < posX): self.width = posX - self.position[0] def npos(self, posX): self.position[0] = posX def contient(self, posX, posY): if(posX > self.position[0] and posX < self.position[0] + self.width and posY > self.position[1] and posY < self.position[1]+ self.height): return True return False def main(): app = MyWindow(True) Gtk.main() |
+0
-0