为什么破坏信号不能到达Gtk.ScrolledWindow的孩子?

问题描述 投票:0回答:1

请考虑这个简单的GTK窗口的python代码:

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

def on_destroy(widget):
    print("Destroying {}".format(widget))

def on_click(button, scroll):
    scroll.destroy()

scroll = Gtk.ScrolledWindow()
scroll.connect("destroy", on_destroy)

button = Gtk.Button.new_with_label("Self-destruct")
scroll.add(button)
button.connect("destroy", on_destroy)
button.connect("clicked", on_click, scroll)

window = Gtk.Window()
window.add(scroll)
window.connect("destroy", Gtk.main_quit)
window.set_size_request(200, 75)
window.show_all()
Gtk.main()

当按下按钮时,我希望得到两个输出行报告ScrolledWindow和按钮被破坏。实际上我只得到一行关于ScrolledWindow的报告,销毁信号永远不会到达按钮。如果我用普通Box替换ScrolledWindow,则销毁信号到达按钮。为什么是这样?

python gtk gtk3
1个回答
0
投票

我真的不能告诉你这个删除按钮的代码。希望您可以根据自己的需求进行调整。看起来这个按钮看起来像是从Viewport中脱离了自己,并且自身也没有任何东西,因为按钮的销毁处理程序在应用程序关闭时运行,并导致奇怪的错误。将这个发布在Gtk邮件列表上以获取任何其他想法会很有趣。

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

def on_destroy(widget, viewport):
    print("Destroying {}".format(widget))
    viewport.get_child().destroy()

def on_button_destroy(widget):
    print("Destroying button {}".format(widget))

def on_click(button):
    scroll = button.get_parent().get_parent()
    scroll.destroy()

scroll = Gtk.ScrolledWindow()
button = Gtk.Button.new_with_label("Self-destruct")
scroll.add(button)
viewport = button.get_parent()
button.connect("destroy", on_button_destroy)
scroll.connect("destroy", on_destroy, viewport)
button.connect("clicked", on_click)

window = Gtk.Window()
window.add(scroll)
window.connect("destroy", Gtk.main_quit)
window.set_size_request(200, 75)
window.show_all()
Gtk.main()
© www.soinside.com 2019 - 2024. All rights reserved.