在 pygtk 中快速动态地从列表和树中添加或删除项目(glade)

在 pygtk 中快速动态地从列表和树中添加或删除项目(glade)

我正在尝试使用 gtk(pygtk)、glade 在 python 中制作一些迷你 CRM 应用程序,并开始快速开发它(这很棒)。

我创建了一些对话框并使用 glade 将列表视图添加到 GUI),但是当我尝试从 glade\quickly 创建的脚本中动态地将一些项目添加到列表中时,应用程序将向从 MySql 调用的用户显示一些数据(如果还有其他选项,我很高兴在这里了解..)它会显示很多错误(在终端中)。

我查找了一些教程,但我发现的只是解释如何从头开始创建列表的教程(没有使用 quick 和 glade)。

以下是代码:

这是快速创建的 applicationWindow.py

我添加了按钮对话框的基本代码等等......

import gettext
from gettext import gettext as _
gettext.textdomain('ubuntucrm')

from gi.repository import Gtk # pylint: disable=E0611
import logging
logger = logging.getLogger('ubuntucrm')

from ubuntucrm_lib import Window
from ubuntucrm.AboutUbuntucrmDialog import AboutUbuntucrmDialog
from ubuntucrm.PreferencesUbuntucrmDialog import PreferencesUbuntucrmDialog
from ubuntucrm.PopupcalendarDialog import PopupcalendarDialog
from ubuntucrm.NewcustomerDialog import NewcustomerDialog
from ubuntucrm.GlobalsearchDialog import GlobalsearchDialog

# See ubuntucrm_lib.Window.py for more details about how this class works
class UbuntucrmWindow(Window):
    __gtype_name__ = "UbuntucrmWindow"

def finish_initializing(self, builder): # pylint: disable=E1002
    """Set up the main window"""
    super(UbuntucrmWindow, self).finish_initializing(builder)

    self.AboutDialog = AboutUbuntucrmDialog
    self.PreferencesDialog = PreferencesUbuntucrmDialog
    #self.PopupcalendarDialog = PopupcalendarDialog

    # Code for other initialization actions should be added here.

    self.CalendarButton = self.builder.get_object("CalendarButton")
    self.contactsButton = self.builder.get_object("contactsButton")
    self.productsButton = self.builder.get_object("productsButton")
    self.OtherButton    = self.builder.get_object("OtherButton")

    #dialogs
    self.cal = PopupcalendarDialog()
    self.contactsDialog = NewcustomerDialog()
    self.globalsearcher = GlobalsearchDialog()

    #lists and modelers
    self.leftTree    = self.builder.get_object("leftTreeview")
    self.treeModeler = self.builder.get_object("liststorer1")


    #functions
def on_OtherButton_clicked(self, widget):
    print "you clicked OtherButton"

//在这里我尝试了类似的事情:

    self.treeModeler.append(["bla bla","some text"])

//例如,从某些 MySQL 数据库加载“bla bla”..

def on_productsButton_clicked(self, widget):
    print "you clicked producs button" 
    self.globalsearcher.run()


def on_contactsButton_clicked(self, widget):
    print "you clicked contactButton "
    self.contactsDialog.run()


def on_CalendarButton_clicked(self, widget):
    print "calling to calendar button"
    self.cal.run()

错误是:

 (ubuntucrm:10443): Gtk-CRITICAL **: gtk_list_store_get_value: assertion `column < priv->n_columns' failed

顺序不正确


|一些文本|bla bla|


代替:


| bla bla | 一些文本 |


答案1

始终提供完整的回溯和附加警告/输出。也就是说,您的问题出在以下代码行中:

    self.treeModeler.append("bla bla")

您应该提供与 中的列相对应的项目列表Gtk.TreeModel。因此,如果您的模型只有 1 个字符串列,只需在字符串周围加上一些括号:

    self.treeModeler.append(["bla bla"])

您有更多不同类型的列吗?请在列表中提供它们:

    self.treeModeler.append(["bla bla", 1234, False, 1.234, GdkPixbuf.Pixbuf, None])

编辑至您的编辑:请记住,您向Gtk.TreeModel列添加值,而不是Gtk.TreeView向列添加值。请参阅我的屏幕截图这个答案并确保将每一Gtk.TreeModel列映射到正确的位置Gtk.CellRendererText

答案2

text当我将 GtkCellRendererText属性设置为不存在的列上的从零开始的索引时出现此错误。

相关内容