![在 pygtk 中快速动态地从列表和树中添加或删除项目(glade)](https://linux22.com/image/1111606/%E5%9C%A8%20pygtk%20%E4%B8%AD%E5%BF%AB%E9%80%9F%E5%8A%A8%E6%80%81%E5%9C%B0%E4%BB%8E%E5%88%97%E8%A1%A8%E5%92%8C%E6%A0%91%E4%B8%AD%E6%B7%BB%E5%8A%A0%E6%88%96%E5%88%A0%E9%99%A4%E9%A1%B9%E7%9B%AE%EF%BC%88glade%EF%BC%89.png)
我正在尝试使用 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属性设置为不存在的列上的从零开始的索引时出现此错误。