在 PyGTK 应用程序中嵌入电子表格/表格? [英] Embed a spreadsheet/table in a PyGTK application?

查看:78
本文介绍了在 PyGTK 应用程序中嵌入电子表格/表格?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用程序中,我们希望向用户展示一个典型的电子表格/表格(OO.O/Excel 样式),然后提取值并在内部对其进行处理.

In my application, we want to present the user with a typical spreadsheet/table (OO.O/Excel-style), and then pull out the values and do something with them internally.

是否有 PyGTK 的预先存在的小部件可以执行此操作?PyGTK FAQ 提到了 GtkGrid,但链接已失效,我在任何地方都找不到 tarball.

Is there a preexisting widget for PyGTK that does this? The PyGTK FAQ mentions GtkGrid, but the link is dead and I can't find a tarball anywhere.

推荐答案

GtkGrid 已弃用,取而代之的是更强大、更可定制的 GtkTreeView.

GtkGrid is deprecated in favor of the more powerful and more customizable GtkTreeView.

它可以显示树和列表.为了让它像表格一样工作,你必须定义一个 ListStore 它将从哪里获取数据,以及 TreeViewColumn 用于您要显示的每一列,带有 CellRenderers 定义如何显示列.数据和渲染的这种分离允许您在单元格上渲染其他控件,例如文本框或图像.

It can display trees and lists. To make it work like a table, you must define a ListStore where it will take the data from, and TreeViewColumns for each column you want to show, with CellRenderers to define how to show the column. This separation of data and render allows you to render other controls on the cell, like text boxes or images.

GtkTreeView 非常灵活,但由于选项众多,乍一看似乎很复杂.为了帮助解决这个问题,相关部分PyGTK 教程(尽管您应该完整阅读,而不仅仅是本节).

GtkTreeView is very flexible, but it seems complex at first because of the many options. To help with that, there's the relevant section in the PyGTK tutorial (although you should read it entirely, not just this section).

为了完整起见,这里有一个示例代码和它在我的系统中运行的屏幕截图:

For completeness, here's an example code and a screenshot of it running in my system:

#!/usr/bin/env python

import pygtk
pygtk.require('2.0')
import gtk

class TreeViewColumnExample(object):

    # close the window and quit
    def delete_event(self, widget, event, data=None):
        gtk.main_quit()
        return False

    def __init__(self):
        # Create a new window
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.set_title("TreeViewColumn Example")
        self.window.connect("delete_event", self.delete_event)

        # create a liststore with one string column to use as the model
        self.liststore = gtk.ListStore(str, str, str, 'gboolean')

        # create the TreeView using liststore
        self.treeview = gtk.TreeView(self.liststore)

        # create the TreeViewColumns to display the data
        self.tvcolumn = gtk.TreeViewColumn('Pixbuf and Text')
        self.tvcolumn1 = gtk.TreeViewColumn('Text Only')

        # add a row with text and a stock item - color strings for
        # the background
        self.liststore.append(['Open', gtk.STOCK_OPEN, 'Open a File', True])
        self.liststore.append(['New', gtk.STOCK_NEW, 'New File', True])
        self.liststore.append(['Print', gtk.STOCK_PRINT, 'Print File', False])

        # add columns to treeview
        self.treeview.append_column(self.tvcolumn)
        self.treeview.append_column(self.tvcolumn1)

        # create a CellRenderers to render the data
        self.cellpb = gtk.CellRendererPixbuf()
        self.cell = gtk.CellRendererText()
        self.cell1 = gtk.CellRendererText()

        # set background color property
        self.cellpb.set_property('cell-background', 'yellow')
        self.cell.set_property('cell-background', 'cyan')
        self.cell1.set_property('cell-background', 'pink')


        # add the cells to the columns - 2 in the first
        self.tvcolumn.pack_start(self.cellpb, False)
        self.tvcolumn.pack_start(self.cell, True)
        self.tvcolumn1.pack_start(self.cell1, True)

        self.tvcolumn.set_attributes(self.cellpb, stock_id=1)
        self.tvcolumn.set_attributes(self.cell, text=0)
        self.tvcolumn1.set_attributes(self.cell1, text=2,
                                      cell_background_set=3)

        # make treeview searchable
        self.treeview.set_search_column(0)

        # Allow sorting on the column
        self.tvcolumn.set_sort_column_id(0)

        # Allow drag and drop reordering of rows
        self.treeview.set_reorderable(True)

        self.window.add(self.treeview)

        self.window.show_all()

def main():
    gtk.main()

if __name__ == "__main__":
    tvcexample = TreeViewColumnExample()
    main()

这篇关于在 PyGTK 应用程序中嵌入电子表格/表格?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆