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