PyGtk: изменить изображение после метода main () окна? - PullRequest
1 голос
/ 25 июня 2011

Я использую виджет gtk.Image для отображения изображения в окне gtk.Я могу настроить отображение изображения перед вызовом window.main (), но после того, как я это сделаю, изображение больше не изменится.В основном:

import pygtk
pygtk.require('2.0')
import gtk

(...)

window= Window()
window.canvas= gtk.Image()
window.window.add(sprite.window.canvas)
window.canvas.show()
window.canvas.set_from_file("pic1.gif")
window.main()
window.canvas.set_from_file("pic2.gif")

pic1.gif будет отображаться.Есть ли правильный способ изменить изображение (мне все равно, придется ли мне использовать виджет, отличный от gtk.Image)?Все, что я могу придумать, это уничтожить окно и создать новое.

Редактировать: я осознал свою ошибку ... Я вызывал window.main () для каждого окна и событие уничтожения любого окна с именем gtk.main_quit ().Пришлось внести небольшие коррективы, но теперь это работает.Даже после вызова window.main ():)

1 Ответ

1 голос
/ 12 сентября 2011

Поскольку Роуинг еще не принял свой собственный ответ, я опубликую его, чтобы получить его в верхней части страницы с вопросами без ответа, и чтобы помочь любому, кто скинет это с помощью переходов в поисковой системе, предоставив исчерпывающий ответ. (Rawing, не стесняйтесь опубликовать свой ответ, все же.)

В вашем коде вы объявляете окно как Window (), а не как gtk.Window. Если вы строите в одном окне, вам не нужно делать это каждый раз. Создайте окно один раз, добавьте к нему то, что вам нужно. Если вам нужны дополнительные окна, объявите их отдельно в этом модуле и вызовите их из кода (а не из основного).

Кроме того, не называйте ваши объекты "окном". в начале ... это становится слишком запутанным. Дайте ему простое имя, добавьте его там, где вам это нужно. Python сделает все остальное.

Очищенная версия вашего кода выше, вероятно, будет выглядеть так:

window = gtk.Window()
#You may need additional arguments above, such as to make it top level.

canvas = gtk.Image()
window.add(canvas)
canvas.show()
canvas.set_from_file("pic1.gif")

Теперь просто измените изображение в событии или другом «def», например:

def ChangePicture():
   canvas.set_from_file("pic2.gif")

Canvas должен автоматически обновлять картинку.

...