2012-07-06 35 views
0

我正在使用python插件。我使用PyQt4設計器。 我想列出查詢結果到QTreeWidget。 我的代碼如下:QTreeWidget中的Python查詢結果

c = self.db.con.cursor() 
self.db._exec_sql(c, "select est from bio") 
for row in c.fetchall(): 
    item_value=unicode(row[0]) 
    top_node1 = QTreeWidgetItem(item_value) 
    self.treeWidget.insertTopLevelItem(0, top_node1) 

查詢返回的值爲:

enter image description here

但是,當我使用上述代碼列出這些值代入QTreeWidget,則如下所示:

enter image description here

只有科幻顯示第一個字符。如果我在self.treeWidget.insertTopLevelItem(0,top_node1)中將'0'更改爲某個其他編號,則QTreeWidget中不會顯示任何內容。

我該怎麼做? thanx。

回答

2

如果你看看documentation for a QTreeWidgetItem,你會看到有很多可能的構造函數來創建一個實例。儘管看起來你沒有用這種方式來給你帶來理想的結果。最匹配您提供的簽名是:

QTreeWidgetItem (const QStringList & strings, int type = Type)

這是什麼東西做的可能正在你的字符串(我假設row[0]是一個字符串,因爲我不知道您正在使用的驅動程序)和將其作爲一個序列來應用,這將滿足QStringList的要求。因此,你所得到的是用你的字符串值的每個字母填充你的項目的多個列。如果這是你想要的,那麼你就會告訴你的小部件顯示更多列:self.treeWidget.setColumnCount(10)。但這不是你正在尋找的,我確信。

更有可能的是,你應該嘗試什麼是創建一個新的項目,然後添加值所需的列:

item = QTreeWidgetItem() 
item.setText(0, unicode(row[0])) 
self.treeWidget.insertTopLevelItem(0, item) 

您可以使用默認的構造函數不帶參數,設置的文本值第一列添加到您的數據庫記錄字段值,然後將該項添加到樹中。你也可以建立在項目的列表,並將它們添加一次:

items = [] 
for row in c.fetchall(): 
    item = QTreeWidgetItem() 
    item.setText(0, unicode(row[0])) 
    items.append(item) 
self.treeWidget.insertTopLevelItems(0, items) 
+0

Thanx .. :) ..我如何使一個項目作爲樹的父母......?我試過valestimate = QTreeWidgetItem(sel_estimate) self.treeWidget .__ init__(self,valestimate,items,type = QTreeWidgetItem.Type)...但它會給出錯誤。 – poonam 2012-07-09 06:22:22

+1

你是否試圖調用樹上的init方法?不要這樣做。 init方法應該直接使用的唯一時間是當你將treewidget子類化爲自定義方法時。 QTreeWidgetItem有自己的方法來添加子項。只需創建一個沒有參數的新項目。設置它。然後執行parentItem.addChild(childItem)。非常重要:閱讀文檔http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qtreewidgetitem。html – jdi 2012-07-09 14:57:04

1

你的第一個形式給出,可以糾正只需添加一個列表中widgetitem不是字符串像這樣:

top_node1 = QTreeWidgetItem( [item_value])

+0

適用於頂級項目使用: self.treeWidget.addTopLevelItems(items) – Macbeth 2012-08-03 22:40:19

+0

歡迎使用堆棧溢出!請查看[如何格式化您的代碼](http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks)以及[其他選項](http ://stackoverflow.com/editing-help/)你必須格式化你的文章。請注意,您可以編輯自己的帖子以添加您忘記的信息。我建議你瀏覽[這份常見問題列表](http://meta.stackexchange.com/questions/7931/faq-for-stack-exchange-sites),並閱讀其中的一些內容。特別是關於回答和提問。 – phant0m 2012-08-04 14:37:21