n00nAzért jelenik meg, mert az OK-ra vagy bármilyen gombra ami a Gtk.Dialog-hoz tartozik, ilyenkor generálódik egy Gtk.Response, és a run metódus visszatér ezzel, vagyis a hívó metódus a run után folytatódik. Az egy dolog, hogy az ablak kintmarad, és átírsz egy labelt :)
Más szemlélettel kell a gui programokat átgondolni, így mindig hasonlókba futsz majd bele.
Ha a user egy Add gombra kattintott, akkor vmit be akar vinni. Oké, feldobod neki az adatbekérő ablakot. A user beírja, vagy nem írja be, de egyszer az ablak be fog záródni. Na akkor kell megvizsgálni a beírt adatot. Ha üres, akkor nem adsz hozzá semmit. Esetleg erről értesíted a usert, de néha még ezt sem kell megtenni.
Ám a miheztartás végett, hogy tényleg segítsek is, itt egy működő megoldás a problémára, ha valami nem tiszta, szívesen válaszolok:
{syntaxhighlighter brush:python}#!/usr/bin/python
# -*- coding:utf-8 -*-
from gi.repository import Gtk
# dialog
class MyDialog(Gtk.Dialog):
def __init__(self, parent):
Gtk.Dialog.__init__(self, "My Dialog", parent, 0,
(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
Gtk.STOCK_OK, Gtk.ResponseType.OK))
label = Gtk.Label("Írjál be valamit")
self.errorlabel = Gtk.Label(" ")
self.entry = Gtk.Entry()
hbox = Gtk.Box()
hbox.set_orientation(Gtk.Orientation.VERTICAL)
hbox.pack_start(label,True,False,2)
hbox.pack_start(self.entry,True,False,2)
hbox.pack_start(self.errorlabel,True,False,2)
box = self.get_content_area()
box.add(hbox)
self.show_all()
# main
class MyMain(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Dialog teszt")
button = Gtk.Button(label="Ablak megnyitása")
self.add(button)
button.connect("clicked",self.button_clicked)
def button_clicked(self,widget):
dialog = MyDialog(self)
exitdialog = False
trueanswer= False
while not exitdialog:
response = dialog.run()
text = dialog.entry.get_text()
if response == Gtk.ResponseType.CANCEL or text != "":
exitdialog = True
dialog.errorlabel.set_text(" ")
if text != "":
trueanswer = True
else:
dialog.errorlabel.set_text("Valamit be kell írnod!")
if response == Gtk.ResponseType.OK:
print "OK megnyomva, entry:", text
elif response == Gtk.ResponseType.CANCEL:
print "Mégsem megnyomva, entry:", text
dialog.destroy()
win = MyMain()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main(){/syntaxhighlighter}