-1

私のプログラムは、少数のファイルを追加するときは正常に動作しますが、ファイルのリストが 500 を超えるとクラッシュします。

エラー:

The program 'gui.py' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadAlloc (insufficient resources for operation)'.
  (Details: serial 14768 error_code 11 request_code 53 minor_code 0)
  (Note to programmers: normally, X errors are reported asynchronously;
   that is, you will receive the error a while after causing it.
   To debug your program, run it with the --sync command line
   option to change this behavior. You can then get a meaningful
   backtrace from your debugger if you break on the gdk_x_error() function.)

コード:

self.tf_idf_document_list = gtk.ListStore(str)
self.tf_idf_tree_documents.set_model(self.tf_idf_document_list)
self.tf_idf_tree_column.set_attributes(self.tf_idf_renderer, text=0)

FileChooser で、ファイルを含むフォルダーを選択し、それらをリストに追加します。

    os.chdir(dir_name)   
    for file_name in os.listdir("."):
        self.tf_idf_document_list.append([file_name])

この種のBoFを修正する方法についての提案。

4

1 に答える 1

1

このエラーは、関数 _gdk_x11_display_error_event の gdkdisplay-x11.c からトリガーされました。これはpygtkが原因ですか?? giモジュールを試してください。私は python3 と gi でテストしましたが、リストストアに 500 を超えるアイテムを追加しても問題はありません。

#!/usr/bin/env python3

from gi.repository import Gtk
import os


def main(dir_name='.'):
    win = Gtk.Window()
    win.set_default_size(300, 400)
    win.connect('destroy', Gtk.main_quit)

    liststore = Gtk.ListStore(str)
    i = 0
    for file_name in os.listdir(dir_name):
        i += 1
        liststore.append([file_name])
    for file_name in os.listdir(dir_name):
        i += 1
        liststore.append([file_name])
    print('num of items:', i)

    treeview = Gtk.TreeView()
    treeview.set_model(liststore)
    renderer_text = Gtk.CellRendererText()
    column_text = Gtk.TreeViewColumn('File', renderer_text, text=0)
    treeview.append_column(column_text)

    scrolledwindow = Gtk.ScrolledWindow()
    scrolledwindow.add(treeview)
    win.add(scrolledwindow)

    win.show_all()
    Gtk.main()

if __name__ == '__main__':
    main('/usr/share')
于 2013-05-16T16:27:03.787 に答える