Я искал решение, чтобы скрыть диалог gtk сразу после получения ответа. Но теперь я интересно, почему она исчезает, но только если я не щелкайте в поле ввода:Почему gtk.Dialog исчезает непосредственно, когда запись не получает фокуса
import gtk, time
def get_info():
entry = gtk.Entry()
entry.set_text("Hello")
dialog = gtk.Dialog(title = "Title",
parent = None,
flags = gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
dialog.vbox.pack_start(entry)
dialog.show_all()
response = dialog.run()
if response == gtk.RESPONSE_ACCEPT:
info = entry.get_text().strip()
dialog.destroy()
return info
else:
exit()
info = get_info()
time.sleep(4)
print info
Если я просто нажать «OK» диалоговое окно исчезает и после 4 секунд информация печатается. Если я нахожусь в поле ввода, а затем нажмите «ОК», диалог не исчезнет, пока программа не закончится. Почему это так?
редактировать:
Такой же проблема, если я делаю это с основным циклом:
#!/usr/bin/env python
# -*- coding: utf8 -*-
import gtk, time
class EntryTest:
def get_info(self):
entry = gtk.Entry()
entry.set_text("Hello")
dialog = gtk.Dialog(title = "Title",
parent = None,
flags = gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT,
gtk.STOCK_OK, gtk.RESPONSE_ACCEPT))
dialog.vbox.pack_start(entry)
dialog.show_all()
response = dialog.run()
if response == gtk.RESPONSE_ACCEPT:
info = entry.get_text().strip()
dialog.destroy()
return info
else:
exit()
def main(self):
gtk.main()
if __name__ == "__main__":
base = EntryTest()
info = base.get_info()
time.sleep(4)
print info
Интересное: если вы нажмете в поле, но выделите текст так, как это было, диалог * * * сразу исчезнет ... Я умираю от любопытства. – zondo