Python 无法关闭gtk对话框窗口
我正在使用gtk创建文件选择对话框:Python 无法关闭gtk对话框窗口,python,gtk3,Python,Gtk3,我正在使用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.Re
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()
和其他方法来强制主循环,但是,我(承认不完美)的理解是,文件对话框实现了循环本身,不需要主循环
有人能帮我把窗户关上吗
我在Ubuntu18.04上使用python 3.6.7、gi 3.26.1,这里有一个解决方案可以满足我的需要。简单地说,它涉及关闭/隐藏主窗口的GLib timeout和执行窗口清理的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)
如果有人能推荐一种更清洁的解决方案,我很乐意了解。强制主循环进行清理并超时以离开它似乎很奇怪。我实际上无法重现这一点。对话框立即消失(这让我相当惊讶)。我在窗户上;也许这就是原因。谢谢。不同的平台可以很好地解释这一点。您有哪个版本的gi?我正在使用Gtk 3.18.9。您可以在
dialog.destroy()之后立即调用Gtk.main\u quit()