Los controles de paneles son útiles cuando quieres dividir un área en dos partes, con el tamaño relativo de las dos partes controlado por el usuario. Una barra se dibuja entre las dos partes con un mango que el usuario puede arrastrar para cambiar la relación. La división puede ser horizontal (HPaned) o vertical (VPaned).
Para crear una nueva ventana con panel, haz una llamada a uno de:
hpane = gtk.HPaned() o vpane = gtk.VPaned() |
Después de crear el control de panel, tienes que añadir hijos a sus dos mitades. Para hacer eso, usa los métodos:
paned.add1(child) paned.add2(child) |
El método add1() añade el control hijo a la izquierda o arriba del control de panel. EL método add2() añade un control hijo a la derecha o abajo del panel.
El programa de ejemplo paned.py crea parte de la interfaz de usuario de un programa de correo electrónico imaginario. Una ventana se divide en dos partes verticalmente, donde la parte de arriba es una lista de correos electrónicos y la parte de abajo es el texto del mensaje electrónico. La mayoría del programa es bastante sencillo. Hay un par de puntos en los que hacer hincapie: no se puede añadir texto a un control Text hasta que se realiza. Esto podría conseguirse llamando al método realize() , pero como demostración de una técnica alternativa, conectamos un manejador para la señal "realize" para añadir el texto. Además, necesitamos añadir la opción SHRINK (encoger) a algunos de los elementos de la tabla que contiene la ventana de texto y sus barras de desplazamiento, para que cuando la parte de abajo se haga más pequeña, las secciones correctas se encojan en vez de que desaparezcan por la parte de abajo de la ventana. La figura Figura 10.6. Ejemplo de Panel muestra el resultado de ejecutar el programa:
El código fuente del programa paned.py es:
1 #!/usr/bin/env python
2
3 # example paned.py
4
5 import gtk, gobject
6
7 class PanedExample:
8 # Create the list of "messages"
9 def create_list(self):
10 # Create a new scrolled window, with scrollbars only if needed
11 scrolled_window = gtk.ScrolledWindow()
12 scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
13
14 model = gtk.ListStore(gobject.TYPE_STRING)
15 tree_view = gtk.TreeView(model)
16 scrolled_window.add_with_viewport (tree_view)
17 tree_view.show()
18
19 # Add some messages to the window
20 for i in range(10):
21 msg = "Message #%d" % i
22 iter = model.append()
23 model.set(iter, 0, msg)
24
25 cell = gtk.CellRendererText()
26 column = gtk.TreeViewColumn("Messages", cell, text=0)
27 tree_view.append_column(column)
28
29 return scrolled_window
30
31 # Add some text to our text widget - this is a callback that is invoked
32 # when our window is realized. We could also force our window to be
33 # realized with GtkWidget.realize, but it would have to be part of a
34 # hierarchy first
35 def insert_text(self, buffer):
36 iter = buffer.get_iter_at_offset(0)
37 buffer.insert(iter,
38 "From: pathfinder@nasa.gov\n"
39 "To: mom@nasa.gov\n"
40 "Subject: Made it!\n"
41 "\n"
42 "We just got in this morning. The weather has been\n"
43 "great - clear but cold, and there are lots of fun sights.\n"
44 "Sojourner says hi. See you soon.\n"
45 " -Path\n")
46
47 # Create a scrolled text area that displays a "message"
48 def create_text(self):
49 view = gtk.TextView()
50 buffer = view.get_buffer()
51 scrolled_window = gtk.ScrolledWindow()
52 scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
53 scrolled_window.add(view)
54 self.insert_text(buffer)
55 scrolled_window.show_all()
56 return scrolled_window
57
58 def __init__(self):
59 window = gtk.Window(gtk.WINDOW_TOPLEVEL)
60 window.set_title("Paned Windows")
61 window.connect("destroy", gtk.mainquit)
62 window.set_border_width(10)
63 window.set_size_request(450, 400)
64
65 # create a vpaned widget and add it to our toplevel window
66 vpaned = gtk.VPaned()
67 window.add(vpaned)
68 vpaned.show()
69
70 # Now create the contents of the two halves of the window
71 list = self.create_list()
72 vpaned.add1(list)
73 list.show()
74
75 text = self.create_text()
76 vpaned.add2(text)
77 text.show()
78 window.show()
79
80 def main():
81 gtk.main()
82 return 0
83
84 if __name__ == "__main__":
85 PanedExample()
86 main()
|