pygtk FileChooserDialog замедляет интерпретатор

Я пытаюсь использовать FileChooserDialog, чтобы получить собственное диалоговое окно gnome в скрипте python. После выполнения сценария моя подсказка ipython -pylab значительно замедляется. Эта проблема также существует из-за простой подсказки Python. Я изолировал проблему в диалоговом окне. Следующий пример (который был опубликован в другом месте как пример pygtk) иллюстрирует проблему:

import pygtk
pygtk.require('2.0')
import gtk
class FileChooserDialog:
    def __init__(self):
        filechooserdialog = gtk.FileChooserDialog("FileChooserDialog Example", None, gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OK, gtk.RESPONSE_OK))        
        response = filechooserdialog.run()
        if response == gtk.RESPONSE_OK:
            print "Selected filepath: %s" % filechooserdialog.get_filename()
        filechooserdialog.destroy()
if __name__ == "__main__":
    FileChooserDialog()

После запуска скрипта мой индикатор жесткого диска начинает мигать после нажатия любой клавиши с клавиатуры — очень странное поведение! У меня нет проблем с устаревшим gtk.FileSelection или любыми другими объектами окна gtk.

В настоящее время я использую python 2.6.5, gtk 2.21.1, pygtk 2.17.0 в Ubuntu 10.04. В целом этот диалог кажется ненадежным; У меня также были некоторые проблемы с тем, что окно не уничтожало себя при выполнении определенных способов в сценариях. Любая помощь будет принята с благодарностью!


person Walt    schedule 26.10.2010    source источник
comment
Ваш отступ от строк 6-10 неверен. При создании класса все это будет выполняться, а не когда вы его инициируете.   -  person new123456    schedule 27.10.2010
comment
Отступ исправлен; код был скопирован неправильно. (Python сообщит об ошибке IndentationError с оригиналом). Проблема осталась. Я надеялся, что кто-нибудь попытается посмотреть, смогут ли они воспроизвести проблему в своей системе.   -  person Walt    schedule 28.10.2010


Ответы (1)


Запустив это в IDLE, я вижу следующие шаги:

  1. Сценарий запускается, и загружается средство выбора файлов.
  2. Интерпретатор блокируется, ожидая FileChooserDialog.run()
  3. Интерпретатор возобновляет работу, когда я нажимаю, чтобы удалить его

Это совсем не то, что вы описываете, поэтому я могу только предположить, что это какая-то эзотерическая, странная ошибка.

У меня немного более старая система (и совершенно другой дистрибутив), поэтому я запускаю:

  • Питон 2.6.4
  • ПиГТК 2.16.0
  • ГТК 2.18.7

Просто для корректности (не обязательно для решения проблемы, хотя кто знает...) не забудьте вызвать .destroy() для диалога после того, как вы вызовете .run() для него.

person new123456    schedule 05.11.2010
comment
Спасибо за ответ. Чтобы было ясно, проблема (замедление в сеансе python) возникает после запуска вышеуказанных скриптов (и диалоговое окно уничтожается). Другими словами, я вижу проблему после шага 3 вашего ответа. При исследовании этого я обнаружил, что у меня нет проблемы в WinXP 32. - person Walt; 08.11.2010
comment
Кроме того, я обнаружил, что проблема возникает при инициализации объекта FileChooserDialog до .run() и не исчезает после .destroy(). Другими словами, вы можете проверить эту проблему, просто выполнив gtk.FileChooserDialog() (после импорта gtk). Я подозреваю, что часть сообщества python действительно заботится об этой проблеме, когда я пытаюсь взаимодействовать с (numpy) объектами после запуска скрипта (как это может быть в Matlab). - person Walt; 08.11.2010
comment
Часть, касающаяся XP, действительно странная, поскольку у GTK не самая лучшая репутация в системах Windows... установите VirtualBox и запустите другой дистрибутив (например, Zenwalk или Mandriva), чтобы проверить, сохраняется ли эта проблема. Я думаю, что не будет. - person new123456; 09.11.2010