Advertisement
Guest User

gtk signal

a guest
Oct 9th, 2011
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.41 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf8 -*-
  3.  
  4. import pygtk
  5. pygtk.require('2.0')
  6. import gtk
  7. import gobject
  8.  
  9.  
  10. def Destroy(widget):
  11.     gtk.main_quit()
  12.  
  13.  
  14. class CustomEventBox(gtk.EventBox):
  15.     def __init__(self):
  16.         super(CustomEventBox, self).__init__()
  17.         self.press_hid = self.connect("button_press_event", self.on_press)
  18.         self.release_hid = self.connect("button_release_event", self.on_release)
  19.         self.set_custom_color()
  20.         self.show()
  21.  
  22.     def on_press(self, widget, event):
  23.         print "v: " + widget.label.get_text()
  24.         widget.pressed()
  25.  
  26.     def on_release(self, widget, event):
  27.         print "^: " + widget.label.get_text()
  28.         widget.released()
  29.  
  30.     def pressed(self):
  31.         pass
  32.  
  33.     def released(self):
  34.         pass
  35.  
  36.     def set_custom_color(self):
  37.         pass
  38.  
  39.  
  40. class OrderBox(CustomEventBox):
  41.     def __init__(self, label_text):
  42.         super(OrderBox, self).__init__()
  43.         self.label = gtk.Label(label_text)
  44.         self.add(self.label)
  45.         self.label.show()
  46.  
  47.     def set_custom_color(self):
  48.         bg = self.get_colormap().alloc_color('white')
  49.         self.modify_bg(gtk.STATE_NORMAL, bg)
  50.         self.emit('message-send', 'normal')
  51.  
  52.     released = set_custom_color
  53.  
  54.     def pressed(self):
  55.         bg = self.get_colormap().alloc_color('green')
  56.         self.modify_bg(gtk.STATE_NORMAL, bg)
  57.         self.emit('message-send', 'pressed')
  58.  
  59. gobject.type_register(OrderBox)
  60. gobject.signal_new('message-send', OrderBox, gobject.SIGNAL_RUN_FIRST | gobject.SIGNAL_ACTION,
  61.                    gobject.TYPE_NONE, (gobject.TYPE_STRING, ))
  62.  
  63.  
  64. class HeadMode(CustomEventBox):
  65.     def __init__(self, mode):
  66.         super(HeadMode, self).__init__()
  67.         self.mode = mode
  68.         self.label = gtk.Label('')
  69.         align = gtk.Alignment(0.1, 0.5, 0, 0)
  70.         align.add(self.label)
  71.         align.show()
  72.         self.add(align)
  73.         self.set_custom_mode(self.mode)
  74.         print gobject.signal_list_names(OrderBox)
  75.         self.connect('message-send', self.on_message)
  76.  
  77.     def on_message(self, widget):
  78.         print widget
  79.  
  80.     def set_custom_mode(self, mode, data=None):
  81.         self.label.set_label(mode)
  82.  
  83. # gobject.type_register(HeadMode)
  84.  
  85.  
  86. class MainWindow(object):
  87.     def __init__(self):
  88.         window = gtk.Window(gtk.WINDOW_TOPLEVEL)
  89.         window.set_title("Signal Demo")
  90.         window.connect("destroy", Destroy)
  91.         window.set_border_width(8)
  92.         vbox = gtk.VBox()
  93.         window.add(vbox)
  94.         head = gtk.HBox()
  95.         head.pack_start(HeadMode('start'), False, True, 4)
  96.         head.show()
  97.         vbox.pack_start(head, False, True, 4)
  98.         table = gtk.Table(3, 3, False)
  99.         vbox.pack_start(table)
  100.         vbox.show()
  101.  
  102.         for cx in range(3):
  103.             for cy in range(3):
  104.                 if cy < 3 or (cy == 3 and cx <=5):
  105.                     label_text = "11300%i0%i" % (cx+1, cy+1)
  106.                 else:
  107.                     label_text = ""
  108.  
  109.                 event_box = OrderBox(label_text)
  110.                 table.attach(event_box, cx, cx+1, cy, cy+1,
  111.                           xpadding=4, ypadding=4)
  112.                 # More things you need an X window for ...
  113.                 event_box.realize()
  114.         table.show()
  115. #        window.fullscreen()
  116.         window.show()
  117.  
  118.  
  119. def main():
  120.     gtk.main()
  121.     return 0
  122.  
  123. if __name__ == "__main__":
  124.     MainWindow()
  125.     main()
  126.  
  127.  
  128.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement