2 回答
TA贡献1829条经验 获得超9个赞
考虑以下是我认为您打算编写的程序。它会显示您单击的图像,然后在 0.2 秒后使其消失。延迟时间更长会更有趣。
EventBox 是必需的,因为 Window 或 Fixed 都不会发出按钮按下事件,尽管它们是小部件。这可能在我的后一个版本中发生了变化,因此可以省略它。但是在我的机器上没有它,代码就无法工作。
在 EventBox 和 Fixed 上调用 show 是多余的,window.show_all()因为它们会显示它们,因为它们当时是树的一部分。但是除非您使用的是 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()
TA贡献1818条经验 获得超11个赞
由于 Gtk 主循环,您不能使用 time.sleep。而是使用这样的超时:
from gi.repository import GLib
....
image.show()
GLib.timeout_add(200, image.hide)
除此之外,您没有使用window.add(image)
添加回答
举报