Creación de un cuadro de mensaje emergente con un campo de entrada

Quiero crear un cuadro de mensaje emergente que solicita al usuario que ingrese una entrada. Tengo este método dentro de una clase. Estoy basando mi código en esta guía de java2s .

class MyDialog: def __init__(self, parent): top = self.top = Toplevel(parent) Label(top, text="Value").pack() self.e = Entry(top) self.e.pack(padx=5) b = Button(top, text="OK", command=self.ok) b.pack(pady=5) def ok(self): print "value is", self.e.get() self.top.destroy() root = Tk() d = MyDialog(root) root.wait_window(d.top) 

Pero en esto, top = self.top = Toplevel(parent) no funciona para mí.

Tengo una maqueta de lo que estoy tratando de lograr.

Maqueta de GUI

La estructura de mi progtwig se ve algo así:

     class MainUI: def__int__(self): ... self.initUI() def initUI(self): ....... Popup = Button(self, text="Enter Value", command=self.showPopup) def showPopup(self): #create the popup with an Entry here 

    ¿Cómo puedo crear un cuadro de mensaje en Python que acepte la entrada del usuario?

    Estoy un poco confundido acerca de sus dos bloques de código diferentes. Solo se dirige al primer bloque de código, no sucede nada porque nunca se ingresa al mainloop. Para hacer eso, necesitas llamar a root.mainloop() . La forma típica de hacer esto es agregar un botón al widget de raíz y enlazar una función de callback al botón (que incluye d=MyDialog() y root.wait_window(d.top) )

    Aquí hay un código básico que espero que haga lo que quieras …

     from Tkinter import * import sys class popupWindow(object): def __init__(self,master): top=self.top=Toplevel(master) self.l=Label(top,text="Hello World") self.l.pack() self.e=Entry(top) self.e.pack() self.b=Button(top,text='Ok',command=self.cleanup) self.b.pack() def cleanup(self): self.value=self.e.get() self.top.destroy() class mainWindow(object): def __init__(self,master): self.master=master self.b=Button(master,text="click me!",command=self.popup) self.b.pack() self.b2=Button(master,text="print value",command=lambda: sys.stdout.write(self.entryValue()+'\n')) self.b2.pack() def popup(self): self.w=popupWindow(self.master) self.b["state"] = "disabled" self.master.wait_window(self.w.top) self.b["state"] = "normal" def entryValue(self): return self.w.value if __name__ == "__main__": root=Tk() m=mainWindow(root) root.mainloop() 

    Obtengo el valor de popupWindow y lo uso en el progtwig principal (eche un vistazo a la función lambda asociada con b2).

    Ventana principal:

    Ventana principal

    Ventana “Haz clic en mi”:

    haz clic en la ventana

    La ventana principal mientras “click me” está abierta:

    Ventana principal con gris