使用Glade的pythongtk列表视图

使用Glade的pythongtk列表视图,python,gtk,pygtk,glade,garmin,Python,Gtk,Pygtk,Glade,Garmin,我目前正在为我的Linux桌面开发一个应用程序,它从Garmin Forerunner sports watch读取数据,解析格式不太好的XML文件,并将数据写入MySQL数据库表。我对Python或GTK没有太多的经验,所以我使用GladeGUI设计器处理图形化的东西。问题就在这里。在写入数据库之前,我想添加一些并非来自手表的数据。我读取和/或计算圈数、圈距、圈速和圈时。然而,我希望能够在中间查看每一圈,并将每一圈归类为速度训练、轻松跑等。。使用组合框。据我所知,listview是一个不错的选

我目前正在为我的Linux桌面开发一个应用程序,它从Garmin Forerunner sports watch读取数据,解析格式不太好的XML文件,并将数据写入MySQL数据库表。我对Python或GTK没有太多的经验,所以我使用GladeGUI设计器处理图形化的东西。问题就在这里。在写入数据库之前,我想添加一些并非来自手表的数据。我读取和/或计算圈数、圈距、圈速和圈时。然而,我希望能够在中间查看每一圈,并将每一圈归类为速度训练、轻松跑等。。使用组合框。据我所知,listview是一个不错的选择

然而,到目前为止,我看到的所有示例和文档都是从代码构建Listview的(而不是通过Glade构建它)。我想循环浏览我的列表(lap[type:int]、duration[type:string]、distance[type:float]和pace[type:string]——注意,我将时间存储为字符串,将它们写入数据库中的时间/日期字段中,并在listview中填充字段(我认为这是正确的方法——如果我错了,请纠正我)以及要分类的组合框。然后,我将从listview中获取每一行并将其写入db

有没有人知道有什么例子可以帮助你,或者有没有人有什么具体的想法

更新: 我主要想知道,如果我通过Glade在GUI上放置listview或treeview,我将如何将其与以下列打包: LapID(int)、距离(float)、持续时间(String)和一个组合框,我可以在其中选择圈的类型。这是战斗的第一部分


填写完列表后,如何引用每一行将其写入db表?

检查下面的示例是否适用于您。它从glade文件加载ui,并使用sqlite数据库存储项

脚本:

import gtk
import sqlite3

class  ListViewTestApp:
    def __init__(self):
        builder = gtk.Builder()
        builder.add_from_file('listview_test.glade')
        builder.connect_signals(self)

        self.model = builder.get_object('list_items')
        self.list = builder.get_object('items_view')

        column = gtk.TreeViewColumn('column0', gtk.CellRendererText(), text=0)   
        column.set_clickable(True)   
        column.set_resizable(True)   
        self.list.append_column(column)

        column = gtk.TreeViewColumn('column1', gtk.CellRendererText(), text=0)   
        column.set_clickable(True)   
        column.set_resizable(True)   
        self.list.append_column(column)

        self.create_database()
        self.load_list_items()

        window = builder.get_object('main_window')
        window.show_all()

    def create_database(self):
        self.engine = sqlite3.connect(':memory:')
        self.engine.execute('create table test_table ' + \
            '(id INTEGER NOT NULL PRIMARY KEY, test_field0 VARCHAR(30), test_field1 VARCHAR(30))');
        self.add_new_line('test0', 'test000');
        self.add_new_line('test1', 'test111');

    def load_list_items(self):
        self.model.clear()        
        result = self.engine.execute('select * from test_table');
        for row in result: 
            self.model.append([row[1], row[2]])

    def add_new_line(self, test0, test1):
        query = 'INSERT INTO test_table (test_field0, test_field1) VALUES ("{0}", "{1}")'\
            .format(test0, test1)
        self.engine.execute(query)

    def on_load_button_clicked(self, widget):
        self.load_list_items()

    def on_add_line_button_clicked(self, widget):
        id = len(self.model)
        self.add_new_line('new_item{0}'.format(id), 'new__item{0}'.format(id));
        self.load_list_items()

if __name__ == "__main__":
    ListViewTestApp()
    gtk.main()
glade文件(listview_test.glade):


真的
270
250
真的
真的
列出项目
200
20
负载
100
40
真的
真的
真的
54
49
添加行
100
40
真的
真的
真的
0.41999998688697815
0.46000000834465027
54
113

希望这有帮助,对于那些注意到“column0”和“column1”相同的人,只需将
text=0
更改为
text=1
,如下所示:

column = gtk.TreeViewColumn('column1', gtk.CellRendererText(), text=1)

我不太明白你的问题是什么。您是否在询问如何在Glade中循环通过ListStore并在运行时添加数据?您的代码在两列中放置相同的值。我如何解决这个问题?
column = gtk.TreeViewColumn('column1', gtk.CellRendererText(), text=1)