繁体   English   中英

无法关闭 gtk 对话窗口

[英]Cannot close gtk dialog window

我正在使用 gtk 创建一个文件选择对话框:

from gi.repository import Gtk
import time

dialog = Gtk.FileChooserDialog("World to load:", None,
                               Gtk.FileChooserAction.OPEN,
    (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
    Gtk.STOCK_OPEN, Gtk.ResponseType.OK))

response = dialog.run()
if response == Gtk.ResponseType.OK:
    print("load", dialog.get_filename())
else:
    print("cancel")

dialog.destroy()

time.sleep(5)

代码有效:我得到文件名或“取消打印”。 但是选择器窗口在程序退出 5 秒后没有关闭。 窗口只是挂在那里,程序运行得更远并且响应迅速。 据我所知,用dialog.hide()替换dialog.destroy()不会改变任何东西。

我收到警告:

Gtk-Message: 10:27:04.843: GtkDialog mapped without a transient parent. This is discouraged.

不确定这是否相关。

我尝试了各种版本的Gtk.main()Gtk.main_quit()和其他强制主循环的方法,但是,我的(公认的不完美)阅读是文件对话框本身实现了循环并且不需要主循环。

谁能帮我关闭这个窗口?

我在 ubuntu 18.04 上使用 python 3.6.7,gi 3.26.1

这是针对我目的的解决方案。 简要地说,它涉及GLib超时,该超时会关闭/隐藏主窗口,而Gtk.main()循环会进行窗口清理。 这是修改后的代码:

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GLib
import time

def onTimeout():
    Gtk.main_quit()
    return False

win = Gtk.Window(title="test")

dialog = Gtk.FileChooserDialog("World to load:", win,
                               Gtk.FileChooserAction.OPEN,
    (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
    Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
response = dialog.run()
if response == Gtk.ResponseType.OK:
    print("load", dialog.get_filename())
else:
    print("cancel")

dialog.destroy()
GLib.timeout_add(100, onTimeout)
Gtk.main()
print("window closed, wait")

time.sleep(5)

如果有人可以提出建议,我将很高兴了解更清洁的解决方案。 强制主循环执行清理和超时以使其离开似乎很奇怪。

只需致电

dialog.show()

dialog.destroy()

听起来很奇怪,但有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM