我正在编写一个类似于任务管理器的程序(类似于windows所具有的),我在GUI中使用gtk + 3中的树视图。问题是,通过使树视图更新“实时”,滚动条停止正常运行。每次刷新树视图时,滚动条都会显示在页面顶部。 这是用于更新树视图的行:
#define SQLITE_HAS_CODEC
#include "sqlite3.h"
#include <string>
#include <iostream>
using namespace std;
int main()
{
sqlite3* db;
sqlite3_open("test1.db", &db);
sqlite3_key(
db, /* Database to be rekeyed */
"test", sizeof("test") /* The key, and the length of the key in bytes */
);
std::string createQuery =
"CREATE TABLE IF NOT EXISTS items (userid INTEGER PRIMARY KEY, ipaddr TEXT, username TEXT, useradd TEXT, userphone INTEGER, age INTEGER, "
"time TEXT NOT NULL DEFAULT (NOW()));";
sqlite3_stmt* createStmt;
std::cout << "Creating Table Statement" << endl;
sqlite3_prepare(db, createQuery.c_str(), createQuery.size(), &createStmt, NULL);
cout << "Stepping Table Statement" << endl;
if (sqlite3_step(createStmt) != SQLITE_DONE) cout << "Didn't Create Table!" << endl;
string insertQuery =
"INSERT INTO items (time, ipaddr,username,useradd,userphone,age) VALUES('7:30', '192.187.27.55', 'vivekanand', 'kolkatta', '04456823948', 74);";
// WORKS!
sqlite3_stmt* insertStmt;
cout << "Creating Insert Statement" << endl;
sqlite3_prepare(db, insertQuery.c_str(), insertQuery.size(), &insertStmt, NULL);
cout << "Stepping Insert Statement" << endl;
if (sqlite3_step(insertStmt) != SQLITE_DONE) cout << "Didn't Insert Item!" << endl;
return 0;
}
这是函数update_treeview:
sqlite3_key(
db, /* Database to be rekeyed */
"test", sizeof("test") /* The key, and the length of the key in bytes */
);
如果重要的话,这就是我创建树视图的方式:
GObject.timeout_add_seconds(1, self.update_treeview)
树视图位于滚动的窗口对象中:
def update_treeview(self):
self.process_list_store.clear()
p_list = create_list(self.properties, create_list_of_processes())
for p in p_list:
self.process_list_store.append(list(p))
return True
我寻找其他更新树视图的方法,但我无法找到解决方案。我很感激有任何帮助来解决这个问题,谢谢!
编辑: 这是完整的代码:
def create_treeview(process_list_store):
treeview = gtk.TreeView(process_list_store)
for i, col_title in enumerate(['Name', 'pid', 'Username', 'Memory usage', 'Cpu usage']):
renderer = gtk.CellRendererText()
column = gtk.TreeViewColumn(col_title, renderer, text=i)
column.set_sort_column_id(i)
column.set_min_width(110)
column.set_resizable(i)
treeview.append_column(column)
return treeview