下面是我在GUI中試圖做的一個模擬版本。我有一個MessageDialog在執行回調方法的過程中創建的。我的問題是MessageDialog在回調方法結束執行之前不會關閉。gtk MessageDialog直到封閉方法完成後纔會關閉
我有一個「dialog.destroy()」這是我所期望的破壞對話。我點擊「是/否」並按下按鈕,但直到「_go」結束,對話框纔會消失。
的「time.sleep(4)」是在有模擬其他的東西我MessageDialog相互作用後發生的事情在我的「_go」的方法結束。
from gi.repository import Gtk, GObject
import time
class Gui(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self)
self.connect("delete_event", Gtk.main_quit)
self.set_size_request(700, 600)
notebook = Gtk.Notebook()
notebook.set_tab_pos(Gtk.PositionType.TOP)
notebook.append_page(MyTab(), Gtk.Label("A tab"))
self.add(notebook)
notebook.show_all()
self.show()
class MyTab(Gtk.VBox):
def __init__(self):
super(MyTab, self).__init__()
self.go_button = Gtk.Button()
self.go_button.add(Gtk.Image().new_from_stock(Gtk.STOCK_APPLY,
Gtk.IconSize.BUTTON))
top_box = Gtk.HBox()
top_box.pack_start(self.go_button, False, True, 5)
self.pack_start(top_box, False, True, 5)
# setup callbacks
self.go_button.connect("clicked", self._go)
def _go(self, _):
dialog = Gtk.MessageDialog(Gtk.Window(),
Gtk.DialogFlags.MODAL,
Gtk.MessageType.QUESTION,
Gtk.ButtonsType.YES_NO,
"RESPONSE REQUIRED")
dialog.format_secondary_text("are you having fun?")
response = dialog.run()
dialog.destroy()
print "your response is: " + str(response)
time.sleep(4)
print "left _go"
def main():
"""
Main entry point.
"""
Gui()
Gtk.main()
if __name__ == "__main__":
main()
我要補充的,如果有人想嘗試運行此,你需要 '中的python-GI'(apt-get的安裝python-GI) – rikityplikity 2013-02-15 00:01:36