- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
首先是代码:
from gi.repository import Gtk, GtkSource, GObject
import os.path
import shelve
class MusicCollection(object):
def __init__(self):
self.builder = Gtk.Builder()
self.glade_file = 'music.glade'
GObject.type_register(GtkSource.View)
self.builder.add_from_file(self.glade_file)
self.window = self.builder.get_object("window1")
self.entry_author = self.builder.get_object("entry_author")
self.entry_album = self.builder.get_object("entry_album")
self.entry_songs = self.builder.get_object("entry_songs")
self.borrowed_toggle = self.builder.get_object("borrowed")
self.create_button = self.builder.get_object("create")
self.update_button = self.builder.get_object("update")
self.delete_button = self.builder.get_object("destroy")
self.view = self.builder.get_object("treeview1")
self.albums_list = self.builder.get_object("albums_list")
self.db = shelve.open("data.db")
self.columns = ["Author", "Album", "Songs", "Borrowed"]
self.connect_signals()
self.initialize()
self.window.show_all()
def connect_signals(self):
self.create_button.connect("clicked", self.create)
self.update_button.connect("clicked", self.update)
self.delete_button.connect("clicked", self.destroy)
self.window.connect("destroy", self.quit)
self.view.get_selection().connect("changed", self.changed)
def initialize(self):
try:
self.albums = self.db['albums']
except KeyError:
self.db["albums"] = []
self.db.sync()
self.albums = self.db['albums']
for i in range(len(self.albums)):
self.albums_list.append(self.albums[i])
for i in range(len(self.columns)):
cell = Gtk.CellRendererText()
col = Gtk.TreeViewColumn(self.columns[i], cell, text=i)
self.view.append_column(col)
def update(self, button):
(instance, iterator) = self.view.get_selection().get_selected()
newItem = (self.entry_author.get_text(),self.entry_album.get_text(),self.entry_songs.get_text(), self.borrowed_toggle.get_mode())
i = self.albums_list.get_path(iterator)[0]
self.albums.pop(i)
self.albums.insert(i,newItem)
instance[iterator][0] = self.entry_author.get_text()
instance[iterator][1] = self.entry_album.get_text()
instance[iterator][2] = self.entry_songs.get_text()
instance[iterator][3] = self.borrowed_toggle.get_mode()
self.db['albums'] = self.albums
self.db.sync()
def destroy(self, selection):
(instance, iterator) = self.view.get_selection().get_selected()
toDel = instance[iiterator][0]
i = self.albums_list.get_path(iterator)[0]
self.albums_list.remove(iterator)
self.albums.pop(i)
self.db['albums'] = self.albums
self.db.sync()
def create(self, somtin):
new_entry = (self.entry_author.get_text(),self.entry_album.get_text(),self.entry_songs.get_text(), self.borrowed_toggle.get_mode())
print(new_entry)
self.albums.append(new_entry)
self.db['albums'] = self.albums
self.db.sync()
self.albums_list.append(new_entry)
def changed(self, selection):
(instance, iterator) = selection.get_selected()
self.entry_author.set_text(instance[iterator][0])
self.entry_album.set_text(instance[iterator][1])
self.entry_songs.set_text(instance[iterator][2])
self.borrowedto.set_mode(instance[iterator][3])
def quit(self, elem):
self.db.close()
Gtk.main_quit()
if __name__ == "__main__":
collection = MusicCollection()
Gtk.main()
每次我在 ListStore 对象上执行 .append() 时,我都会收到这样的错误:
Traceback (most recent call last):
File "./music.py", line 85, in create
self.albums_list.append(new_entry)
File "/usr/lib/python3/dist-packages/gi/overrides/Gtk.py", line 945, in append
return self._do_insert(-1, row)
File "/usr/lib/python3/dist-packages/gi/overrides/Gtk.py", line 936, in _do_insert
row, columns = self._convert_row(row)
File "/usr/lib/python3/dist-packages/gi/overrides/Gtk.py", line 844, in _convert_row
result.append(self._convert_value(cur_col, value))
File "/usr/lib/python3/dist-packages/gi/overrides/Gtk.py", line 862, in _convert_value
return GObject.Value(self.get_column_type(column), value)
File "/usr/lib/python3/dist-packages/gi/overrides/GObject.py", line 214, in __init__
self.init(value_type)
TypeError: Must be gobject.GType, not gobject.GType
ListStore对象当然是(str, str, str, boolean)类型。错误消息很荒谬,谁能告诉我发生了什么事?
最佳答案
问题是我在定义列类型时使用了 python 类型名称,而不是 GTK 类型名称。我将它设置为 (str, str, str, bool),但它应该是 (gchararray, gchararray, gchararray, gboolean)。
关于python - 向 ListStore 添加行不起作用 - 荒谬的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20621933/
我想用包含 ComboBoxes 的 TreeView 使用 gtk-rs bindings 创建程序. 为了获得GtkCellRendererCombo的数据,我需要一个GtkTreeModel *
我正在尝试创建一个 ListStore,以便在输入字段中将其设置为完成模型。 ListStore store = new ListStore(string); 输出:错误 CS1526:意外符号 )'
我正在尝试将我的应用程序从 python2.7 pyGTK 切换到 Python3 和 pyGObject,并且很难将行附加到我的 Gtk.ListStore :/ 这段代码: #!/usr/bin/
我有一个我的类 A 的对象列表 L。这个类实现了 __str__/__repr__,所以每个对象都有它自己的字符串表示(不一定是唯一的)。我在 pygtk 中有一个 GUI,其中我有一个只有一列的 T
我正在寻找 Gtk.ListStore 中的一个功能,它像 Winforms 中的 ListView.VirtualMode 一样工作。 有这样的东西吗? 最佳答案 Gtk#的ListStore是一种
嗯,我在 GWT(gxt) 中遇到了问题。 我的屏幕中有一个可编辑的网格,我将 itens 与列表一起放入该网格中,但编辑此网格后我再次需要此列表以保存在数据库中我应该做什么? 像这样: public
我有一个项目对象列表,我将其显示在 GtkTreeView 中。当用户双击 TreeView 中的项目行时,我试图打开一个包含项目详细信息的对话框。 现在,我通过 get_selection() 从
我有一个包含很多字段的 ListStore,其中大部分都是相同的: store = gtk.ListStore(str,str,str,str,str,str,str,str,
如何检查 GtkListStore 中是否已存在某个值以避免重复?我根据用户的数据输入动态地从数据库中获取值,但是如果用户键入与先前键入的单词相同或相似的单词,它可以返回相同的结果,从而使我的 Gtk
我用 PyGTK 实现了一个 GUI,代码如下: swin = gtk.ScrolledWindow() swin.set_shadow_type(gtk.SHADOW_ETCHED_IN) self
如何在C中获取gtk.ListStore的项目数/行数/长度/计数 这是我的示例代码: store = gtk_list_store_new (NUM_COLS, G_TYPE_STRING, G
我有一个带有 gtk.TreeView 的 GUI,我想将 gtk.ListStore 转换为 python 列表,我该怎么做? 最佳答案 您可以使用嵌套 list comprehensions :
http://img824.imageshack.us/i/capturadetelag.png/ 如何更新 gtk.liststore? 我的意思是每秒在列上获取一个随机数,就像示例一样,例如下载管
在 PyGtk 中,我总是使用它来创建带有图像的 ListStore(将它与 IconView 一起用于显示文件): store = gtk.ListStore(str, gtk.gdk.Pixbuf
首先是代码: from gi.repository import Gtk, GtkSource, GObject import os.path import shelve class MusicCol
我正在使用 Liststore 将 DTO 对象中的数据显示到网格中。大多数对象属性都是字符串,可以很容易地显示。但其中一个参数是一组字符串总而言之,我的对象如下所示: public class My
我已经创建了以下列表存储: # creating list view store = Gtk.ListStore(GdkPixbuf.Pixbuf, str, bool) se
所以我正在 java 中使用网格小部件...并且当尝试迭代 ListStore 时出现以下错误。 [javac] required: array or java.lang.Iterable [ja
我试图在 TreeView 中显示数据库中的几行,但我得到的只是一些虚拟行,如下图所示。 class SettingsDialog(gtk.Dialog): def __init__(self
我有一个 ListStore为 Tag 的列表建模秒。除了 ListStore 之外,此列表可能会发生变化.我想做的是听TagRemoved我的事件TagList类,并删除 Tag来自 ListSto
我是一名优秀的程序员,十分优秀!