Python Gtk показать и скрыть изображение - PullRequest
1 голос
/ 25 сентября 2019

Я новичок в GTK, и я хочу знать, как показать изображение в точке (x, y), когда я нажал на окно.Я поставил image.show () и image.hide (), но ничего не появляется ...

from gi.repository import Gtk
import time

def callback(window, event):
    print ('Clicked at x=', event.x, "and y=", event.y)
    image.show()
    time.sleep(0.2)
    image.hide() 

image = Gtk.Image()
image.set_from_file("C:\\Users\\alimacher\\FF0000.png")

window = Gtk.Window()

window.set_title('Dalle Test')

window.set_size_request(320, 240)

window.connect('button-press-event', callback)
window.connect('destroy', lambda w: Gtk.main_quit())
window.show_all()
Gtk.main()

Спасибо.

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

Рассмотрим следующую программу, которую, как я думал, вы хотели написать.Это показывает изображение, где вы нажимаете, а затем заставляет его исчезнуть через 0,2 секунды.Это было бы более интересно с большей задержкой.

EventBox не нужен, поскольку ни Window, ни Fixed не генерируют событие нажатия кнопки, хотя они и являются виджетами.Возможно, это изменилось в более поздней версии, чем у меня, поэтому можно было бы ее опустить.Но код не работал без него на моей машине.

Вызов show на EventBox и Fixed был избыточным, так как window.show_all() покажет их, поскольку они являются частью дерева в то время.Но вызов show на изображении возможен только в том случае, если вы используете версию GTK, в которой виджеты отображаются по умолчанию, а не скрыты.Поскольку Изображение не существует в то время.

from gi.repository import Gtk, GLib

window = Gtk.Window()
window.set_title('Dalle Test')
window.set_size_request(320, 240)

eventbox = Gtk.EventBox()
window.add(eventbox)

fixed = Gtk.Fixed()

eventbox.add(fixed)

def callback(window, event, *data):
    print('Clicked at x=', event.x, "and y=", event.y)
    image = Gtk.Image()
    image.show()
    image.set_from_file("FF0000.png")
    image.set_size_request(64,64)
    fixed.put(image, int(event.x), int(event.y))

    def remove():
        fixed.remove(image)
    GLib.timeout_add(200, remove)

eventbox.connect('button-press-event', callback)

window.connect('destroy', lambda w: Gtk.main_quit())
window.show_all()
Gtk.main()
0 голосов
/ 25 сентября 2019

Из-за основного цикла Gtk вы не можете использовать time.sleep.Вместо этого используйте следующие таймауты:

from gi.repository import GLib
....
image.show()
GLib.timeout_add(200, image.hide)

Кроме того, вы не добавили изображение в окно, используя window.add(image)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...