    sig
      val openTk :
        ?display:string -> ?clas:string -> unit -> Widget.toplevel Widget.widget
      val mainLoop : unit -> unit
      val closeTk : unit -> unit
      val destroy : 'a Widget.widget -> unit
      val update : unit -> unit
      val appname_get : unit -> string
      val appname_set : string -> unit
      type units = [ `Pix of int
                   | `Cm of float
                   | `In of float
                   | `Mm of float
                   | `Pt of float]
      val pixels : Tk.units -> int
      type anchor = [ `Center | `E | `N | `Ne | `Nw | `S | `Se | `Sw | `W]
      and fillMode = [ `Both | `None | `X | `Y]
      and side = [ `Bottom | `Left | `Right | `Top]
      val pack :
        ?after:'a Widget.widget ->
        ?anchor:Tk.anchor ->
        ?before:'b Widget.widget ->
        ?expand:bool ->
        ?fill:Tk.fillMode ->
        ?inside:'c Widget.widget ->
        ?ipadx:int ->
        ?ipady:int ->
        ?padx:int -> ?pady:int -> ?side:Tk.side -> 'd Widget.widget list -> unit
      val grid :
        ?column:int ->
        ?columnspan:int ->
        ?inside:'a Widget.widget ->
        ?ipadx:int ->
        ?ipady:int ->
        ?padx:int ->
        ?pady:int ->
        ?row:int ->
        ?rowspan:int -> ?sticky:string -> 'b Widget.widget list -> unit
      type borderMode = [ `Ignore | `Inside | `Outside]
      val place :
        ?anchor:Tk.anchor ->
        ?bordermode:Tk.borderMode ->
        ?height:int ->
        ?inside:'a Widget.widget ->
        ?relheight:float ->
        ?relwidth:float ->
        ?relx:float ->
        ?rely:float -> ?width:int -> ?x:int -> ?y:int -> 'b Widget.widget -> unit
      val raise_window : ?above:'a Widget.widget -> 'b Widget.widget -> unit
      val lower_window : ?below:'a Widget.widget -> 'b Widget.widget -> unit
      type modifier = [ `Control
                      | `Shift
                      | `Lock
                      | `Button1
                      | `Button2
                      | `Button3
                      | `Button4
                      | `Button5
                      | `Double
                      | `Triple
                      | `Mod1
                      | `Mod2
                      | `Mod3
                      | `Mod4
                      | `Mod5
                      | `Meta
                      | `Alt]
      and event = [ `ButtonPress
                  | `ButtonPressDetail of int
                  | `ButtonRelease
                  | `ButtonReleaseDetail of int
                  | `Circulate
                  | `ColorMap
                  | `Configure
                  | `Destroy
                  | `Enter
                  | `Expose
                  | `FocusIn
                  | `FocusOut
                  | `Gravity
                  | `KeyPress
                  | `KeyPressDetail of string
                  | `KeyRelease
                  | `KeyReleaseDetail of string
                  | `Leave
                  | `Map
                  | `Motion
                  | `Property
                  | `Reparent
                  | `Unmap
                  | `Visibility
                  | `Modified of modifier list * event]
      and eventInfo = {
        mutable ev_Above : int;
        mutable ev_ButtonNumber : int;
        mutable ev_Count : int;
        mutable ev_Detail : string;
        mutable ev_Focus : bool;
        mutable ev_Height : int;
        mutable ev_KeyCode : int;
        mutable ev_Mode : string;
        mutable ev_OverrideRedirect : bool;
        mutable ev_Place : string;
        mutable ev_State : string;
        mutable ev_Time : int;
        mutable ev_Width : int;
        mutable ev_MouseX : int;
        mutable ev_MouseY : int;
        mutable ev_Char : string;
        mutable ev_BorderWidth : int;
        mutable ev_SendEvent : bool;
        mutable ev_KeySymString : string;
        mutable ev_KeySymInt : int;
        mutable ev_RootWindow : int;
        mutable ev_SubWindow : int;
        mutable ev_Type : int;
        mutable ev_Widget : Widget.any Widget.widget;
        mutable ev_RootX : int;
        mutable ev_RootY : int;
      }
      and eventField = [ `Above
                       | `ButtonNumber
                       | `Count
                       | `Detail
                       | `Focus
                       | `Height
                       | `KeyCode
                       | `Mode
                       | `OverrideRedirect
                       | `Place
                       | `State
                       | `Time
                       | `Width
                       | `MouseX
                       | `MouseY
                       | `Char
                       | `BorderWidth
                       | `SendEvent
                       | `KeySymString
                       | `KeySymInt
                       | `RootWindow
                       | `SubWindow
                       | `Type
                       | `Widget
                       | `RootX
                       | `RootY]
      val bind :
        events:Tk.event list ->
        ?extend:bool ->
        ?breakable:bool ->
        ?fields:Tk.eventField list ->
        ?action:(Tk.eventInfo -> unit) -> 'a Widget.widget -> unit
      val bind_class :
        events:Tk.event list ->
        ?extend:bool ->
        ?breakable:bool ->
        ?fields:Tk.eventField list ->
        ?action:(Tk.eventInfo -> unit) -> ?on:'a Widget.widget -> string -> unit
      val bind_tag :
        events:Tk.event list ->
        ?extend:bool ->
        ?breakable:bool ->
        ?fields:Tk.eventField list ->
        ?action:(Tk.eventInfo -> unit) -> ?on:'a Widget.widget -> string -> unit
      val break : unit -> unit
    end