I have an application that I wrote using PyGTK that I recently converted
to use PyGobject introspection. There were a few things that don't seem
to work. I have pared my program down to a simple test case program
that demonstrates what doesn't work. Basically when I try to make a
frozen column in a scroll list, the vertical and horizontal scrolling
does not work right. I am including the pygtk test case that shows what
I want. What I think is the equivalent PyGobject program has the
following problems:
1. The vertical scrolling is not right in that all of the lines don't
show and the vertical scroll bar will only show when the horizontal
scroll bar shows. This can be seen by running the test case and
resizing the window.
2. The horizontal scroll bar does not show in the bottom pane.
pygtk_test.py is the pygtk test case that does work and demonstrates how
it should be.
gi_test.py is the PyGobject test case that has the problems.
gi_test2.py is the PyGobject test case that works because it doesn't
contain the frozen column.
Is there something I am not doing correctly or is this a PyGobject bug?
Brent
#! /usr/bin/env python
''' Program to test the gi gtk interface.
'''
import gtk, gobject, pango
def sync_selection(treeselection, other_treeview):
''' Synchronize the frozen column and the non-frozen columns.
'''
other_treeview.get_selection().select_iter(treeselection.get_selected()[1])
def quit_callback(widget):
"""Callback for file->quit menu item.
"""
gtk.main_quit()
def create_window():
''' Create a scrolled window.
'''
liststore = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING)
for ii in range(20):
liststore.append(['%d' % ii, 'row %d, col 1' % ii, 'row %d, col 2' % ii, ''])
treeview = gtk.TreeView(liststore)
renderer = gtk.CellRendererText()
renderer.set_property('font-desc', pango.FontDescription('Monospace Normal 10'))
# Right justify the data.
renderer.set_property('xalign', 1.0)
col1 = gtk.TreeViewColumn('Col 1', renderer, markup=1)
col2 = gtk.TreeViewColumn('Col 2', renderer, markup=2)
treeview.append_column(col1)
treeview.append_column(col2)
# Add an extra column so the last column doesn't expand.
treeview.append_column(gtk.TreeViewColumn('', renderer, text=3))
treeview.set_size_request(-1, 10)
treeview.show()
treeview_ndx = gtk.TreeView(liststore)
treeview_ndx.set_size_request(-1, 10)
col_ndx = gtk.TreeViewColumn('Index', renderer, text=0)
treeview_ndx.append_column(col_ndx)
treeview_ndx.show()
scrolled_window = gtk.ScrolledWindow()
# Link the scrolling.
treeview_ndx.set_vadjustment(scrolled_window.get_vadjustment())
# Link selection.
treeview_ndx.get_selection().connect('changed', sync_selection, treeview)
treeview.get_selection().connect('changed', sync_selection, treeview_ndx)
scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
scrolled_window.show()
scrolled_window.add(treeview)
hpaned = gtk.HPaned()
hpaned.add1(treeview_ndx)
hpaned.add2(scrolled_window)
hpaned.show()
return hpaned
# The main program starts here.
if __name__ == '__main__':
ui = '''<ui>
<menubar name="MenuBar">
<menu action="File">
<menuitem action="Quit"/>
</menu>
</menubar>
<popup name="Popup">
</popup>
<toolbar name="Toolbar">
</toolbar>
</ui>'''
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.set_default_size(200, 200)
window.show()
box = gtk.VBox(False, 0)
box.show()
window.add(box)
uimanager = gtk.UIManager()
accelgroup = uimanager.get_accel_group()
window.add_accel_group(accelgroup)
actiongroup = gtk.ActionGroup('UIManagerGiTest')
actiongroup.add_actions([('Quit', gtk.STOCK_QUIT, '_Quit', None,
'Quit the Program', quit_callback),
('File', None, '_File')])
uimanager.insert_action_group(actiongroup, 0)
uimanager.add_ui_from_string(ui)
menubar = uimanager.get_widget('/MenuBar')
box.pack_start(menubar, False, True, 0)
toolbar = uimanager.get_widget('/Toolbar')
for n in range(0, toolbar.get_n_items()):
toolbar.get_nth_item(n).set_is_important(True)
box.pack_start(toolbar, False, True, 0)
status_bar = gtk.Statusbar()
box.pack_end(status_bar, False, True, 0)
context_id = status_bar.get_context_id("Statusbar")
status_bar.push(context_id, "Welcome")
status_bar.show()
vpaned = gtk.VPaned()
vpaned.add1(create_window())
vpaned.add2(create_window())
vpaned.show()
box.add(vpaned)
gtk.main()
#! /usr/bin/env python
''' Program to test the gi gtk interface.
'''
from gi.repository import Gtk, Gdk, GObject, Pango
def sync_selection(treeselection, other_treeview):
''' Synchronize the frozen column and the non-frozen columns.
'''
other_treeview.get_selection().select_iter(treeselection.get_selected()[1])
def quit_callback(widget):
"""Callback for file->quit menu item.
"""
Gtk.main_quit()
def create_window():
''' Create a scrolled window.
'''
liststore = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING)
for ii in range(20):
liststore.append(['%d' % ii, 'row %d, col 1' % ii, 'row %d, col 2' % ii, ''])
treeview = Gtk.TreeView(liststore)
renderer = Gtk.CellRendererText()
renderer.set_property('font-desc', Pango.FontDescription('Monospace Normal 10'))
# Right justify the data.
renderer.set_property('xalign', 1.0)
col1 = Gtk.TreeViewColumn('Col 1', renderer, markup=1)
col2 = Gtk.TreeViewColumn('Col 2', renderer, markup=2)
treeview.append_column(col1)
treeview.append_column(col2)
# Add an extra column so the last column doesn't expand.
treeview.append_column(Gtk.TreeViewColumn('', renderer, text=3))
treeview.set_size_request(-1, 10)
treeview.show()
treeview_ndx = Gtk.TreeView(liststore)
treeview_ndx.set_size_request(-1, 10)
col_ndx = Gtk.TreeViewColumn('Index', renderer, text=0)
treeview_ndx.append_column(col_ndx)
treeview_ndx.show()
scrolled_window = Gtk.ScrolledWindow()
# Link the scrolling.
treeview_ndx.set_vadjustment(scrolled_window.get_vadjustment())
# Link selection.
treeview_ndx.get_selection().connect('changed', sync_selection, treeview)
treeview.get_selection().connect('changed', sync_selection, treeview_ndx)
scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
scrolled_window.show()
scrolled_window.add(treeview)
hpaned = Gtk.Paned.new(Gtk.Orientation.HORIZONTAL)
hpaned.add1(treeview_ndx)
hpaned.add2(scrolled_window)
hpaned.show()
return hpaned
# The main program starts here.
if __name__ == '__main__':
ui = '''<ui>
<menubar name="MenuBar">
<menu action="File">
<menuitem action="Quit"/>
</menu>
</menubar>
<popup name="Popup">
</popup>
<toolbar name="Toolbar">
</toolbar>
</ui>'''
window = Gtk.Window(Gtk.WindowType.TOPLEVEL)
window.set_default_size(200, 200)
window.show()
box = Gtk.VBox(False, 0)
box.show()
window.add(box)
uimanager = Gtk.UIManager()
accelgroup = uimanager.get_accel_group()
window.add_accel_group(accelgroup)
actiongroup = Gtk.ActionGroup('UIManagerGiTest')
actiongroup.add_actions([('Quit', Gtk.STOCK_QUIT, '_Quit', None,
'Quit the Program', quit_callback),
('File', None, '_File')])
uimanager.insert_action_group(actiongroup, 0)
uimanager.add_ui_from_string(ui)
menubar = uimanager.get_widget('/MenuBar')
box.pack_start(menubar, False, True, 0)
toolbar = uimanager.get_widget('/Toolbar')
for n in range(0, toolbar.get_n_items()):
toolbar.get_nth_item(n).set_is_important(True)
box.pack_start(toolbar, False, True, 0)
status_bar = Gtk.Statusbar()
box.pack_end(status_bar, False, True, 0)
context_id = status_bar.get_context_id("Statusbar")
status_bar.push(context_id, "Welcome")
status_bar.show()
vpaned = Gtk.Paned.new(Gtk.Orientation.VERTICAL)
vpaned.add1(create_window())
vpaned.add2(create_window())
vpaned.show()
box.add(vpaned)
Gtk.main()
#! /usr/bin/env python
''' Program to test the gi gtk interface.
'''
from gi.repository import Gtk, Gdk, GObject, Pango
def sync_selection(treeselection, other_treeview):
''' Synchronize the frozen column and the non-frozen columns.
'''
other_treeview.get_selection().select_iter(treeselection.get_selected()[1])
def quit_callback(widget):
"""Callback for file->quit menu item.
"""
Gtk.main_quit()
def create_window():
''' Create a scrolled window.
'''
liststore = Gtk.ListStore(GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING)
for ii in range(20):
liststore.append(['%d' % ii, 'row %d, col 1' % ii, 'row %d, col 2' % ii, ''])
treeview = Gtk.TreeView(liststore)
renderer = Gtk.CellRendererText()
renderer.set_property('font-desc', Pango.FontDescription('Monospace Normal 10'))
# Right justify the data.
renderer.set_property('xalign', 1.0)
col1 = Gtk.TreeViewColumn('Col 1', renderer, markup=1)
col2 = Gtk.TreeViewColumn('Col 2', renderer, markup=2)
treeview.append_column(col1)
treeview.append_column(col2)
# Add an extra column so the last column doesn't expand.
treeview.append_column(Gtk.TreeViewColumn('', renderer, text=3))
treeview.set_size_request(-1, 10)
treeview.show()
treeview_ndx = Gtk.TreeView(liststore)
treeview_ndx.set_size_request(-1, 10)
col_ndx = Gtk.TreeViewColumn('Index', renderer, text=0)
treeview_ndx.append_column(col_ndx)
treeview_ndx.show()
scrolled_window = Gtk.ScrolledWindow()
# Link the scrolling.
treeview_ndx.set_vadjustment(scrolled_window.get_vadjustment())
# Link selection.
treeview_ndx.get_selection().connect('changed', sync_selection, treeview)
treeview.get_selection().connect('changed', sync_selection, treeview_ndx)
scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
scrolled_window.show()
scrolled_window.add(treeview)
#hpaned = Gtk.Paned.new(Gtk.Orientation.HORIZONTAL)
#hpaned.add1(treeview_ndx)
#hpaned.add2(scrolled_window)
#hpaned.show()
#return hpaned
return scrolled_window
# The main program starts here.
if __name__ == '__main__':
ui = '''<ui>
<menubar name="MenuBar">
<menu action="File">
<menuitem action="Quit"/>
</menu>
</menubar>
<popup name="Popup">
</popup>
<toolbar name="Toolbar">
</toolbar>
</ui>'''
window = Gtk.Window(Gtk.WindowType.TOPLEVEL)
window.set_default_size(200, 200)
window.show()
box = Gtk.VBox(False, 0)
box.show()
window.add(box)
uimanager = Gtk.UIManager()
accelgroup = uimanager.get_accel_group()
window.add_accel_group(accelgroup)
actiongroup = Gtk.ActionGroup('UIManagerGiTest')
actiongroup.add_actions([('Quit', Gtk.STOCK_QUIT, '_Quit', None,
'Quit the Program', quit_callback),
('File', None, '_File')])
uimanager.insert_action_group(actiongroup, 0)
uimanager.add_ui_from_string(ui)
menubar = uimanager.get_widget('/MenuBar')
box.pack_start(menubar, False, True, 0)
toolbar = uimanager.get_widget('/Toolbar')
for n in range(0, toolbar.get_n_items()):
toolbar.get_nth_item(n).set_is_important(True)
box.pack_start(toolbar, False, True, 0)
#notebook = Gtk.Notebook()
#notebook.set_tab_pos(Gtk.PositionType.TOP)
#notebook.show()
#box.add(notebook)
status_bar = Gtk.Statusbar()
box.pack_end(status_bar, False, True, 0)
context_id = status_bar.get_context_id("Statusbar")
status_bar.push(context_id, "Welcome")
status_bar.show()
vpaned = Gtk.Paned.new(Gtk.Orientation.VERTICAL)
vpaned.add1(create_window())
vpaned.add2(create_window())
vpaned.show()
#notebook.append_page(vpaned, None)
box.add(vpaned)
Gtk.main()
_______________________________________________
pygtk mailing list [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://faq.pygtk.org/