簡體   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