The term "graphical user interface" is often expressed as the acronym GUI.
It refers to a window and all of its controls. These are the graphical elements
that interact with the user. The user may click a button, or type into a textbox, for instance.
The possible TYPES of windows available in Liberty BASIC programs are listed in Window Types.
The commands that can be sent to windows are listed in Window and Dialog Commands.
See also, Size and Placement of Windows and Trapping the Close Event.
The controls available for placement on windows are listed in
Controls - Menus, Buttons, etc.
Information about handling user-generated events is given in Controls and Events.
Coloring of windows and controls is discussed in Colors and the Graphical User Interface.
An explanation of the methods for sending commands is discussed
in Understanding Syntax, as well as in Sending Commands.
Changing the handle of a window dynamically at runtime can be accomplished with the MAPHANDLE command.

Hier is een plaatje van een venster dat vele controls bevat:

Liberty BASIC kan goed overweg met de gebruikelijke statements
OPEN, CLOSE, PRINT (en optioneel INPUT)
als er gewerkt wordt met GUI (spreek uit "goewie") elementen.
Dat zijn "graphical user interface " elementen. Bijvoorbeeld:

open "My Text Window" for text as #txtWin

print #txtWin, "The fox jumped over the dog."

print #txtWin, "!trapclose [quit]";

wait

[quit]

close #txtWin

end

Het OPEN statement wordt gebruikt om een venster te openen.
Het venster kan commando's via het PRINT statement ontvangen,
en het wordt gesloten met het CLOSE statement.
Het tweede print statement hierboven begin met een uitroeppunt.
Dit is vereist bij het printen van commando's naar tekst-controls
om Liberty BASIC aan te geven dat het hier om een uit te voeren commando
gaat in plaats van een tekst die op of door de control moet worden getoond.

Nieuw voor Liberty BASIC 3:
Het is niet meer noodzakelijk om de PRINT statement te gebruiken
wanneer bij geven van commando's aan een venster of een control.
Het woord "print " is niet verplicht (het is facultatief),
zoals ook de komma na het venster of controlehandvat naar keuze zijn.
Het nu volgende voorbeeld functioneert identiek als bovenstaande versie,
maar het vereist minder typwerk:

open "My Text Window" for text as #txtWin

#txtWin "The fox jumped over the dog."

#txtWin "!trapclose [quit]";

wait

[quit]

close #txtWin

end

Door het statement "! trapclose [quit]" aan een venter mee te geven,
vertellen aan het venster om de event handler
(het sluiten van het venster met het afsluitkruisje of ALT+F4) te gebruiken
om het stukje programma te runnen dat aangegeven wordt door het label [quit].
Dit is belangrijk.
Elk geopend venster moet ook een event handler hebben
om het afsluiten van het venster te detecteren en af te handelen.

De vensters kunnen verschillende andere GUI elementen bevatten. Hier is een voorbeeld:

statictext #dialog.static, "What is your name?", 10, 10, 100, 20

textbox #dialog.tbox, 10, 30, 100, 20

button #dialog.accept, "Accept", [gotIt], UL, 10, 55

open "Name getter" for dialog as #dialog

print #dialog.tbox, "Type your names in here."

print #dialog, "trapclose [quit]"

wait

[gotIt]

print #dialog.tbox, "!contents? name$"

notice "Hi "; name$

wait

[quit]

close #dialog

end

Het "trapclose [quit]" statement van het venster hierboven heft geen uitroepteken nodig.
Dat komt omdat het betrokken venster een dialoogvenster is,
en geen tekst widget waarop teksten op verschijnen.
Daarom accepteert het tekstuele commando's die niet hoeven te starten met een uitroepteken.

De controls die aan dit venster zijn toegevoegd zijn onder andere
een statictext (niet te veranderen label),
een textbox (een te wijzigen tekstveld)
en een drukknop.
Zij staan beschreven vr het OPEN statement waarmee het dialoog venster wordt geopend.
Het button statement is inclusief de aftakkinglabel [gotIt].
Het stukje code bij [gotIt] is de event handler van de knop. Als op de knop geklikt wordt,
dan genereert dat een event (gebeurtenis) en [gotIt] wordt ingeschakeld.
Bij de code bij [gotIt] aangekomen volgt een commando waarbij in een textbox een string getikt moet worden,
deze string wordt aan de variabele name$ toegewezen.
Het programma lanceert dan een berichtenvenster dat een groet toont aan de gebruiker.

Het venster in het voorbeeld hierboven ontvangt ook een "trapclose" bevel.
Hiermee wordt een handler voor het sluiten (event) van het venster geregeld.
De handler staat na het aftakkinglabel dat bij "trapclose" wordt aangewezen.
Daar aangekomen, kan het venster, indien nodig, misschien navragen bij de gebruiker
of alsnog gesloten dient te worden of niet, bijvoorbeeld:

[quit]

confirm "Quit. Are you sure?"; yesOrNo$

if yesOrNo$ = "yes" then [quitForSure]

wait

[quitForSure]

close #dialog

end

Grafische controls die teksten tonen zullen tekstinvoer accepteren en
direct tonen als die tekst naar ze geprint wordt:

texteditor #main.txtEdit, 3, 3, 250, 300

open "Edit some text, man!" for window as #main

print #main, "trapclose [quit]"

print #main.txtEdit, "C'mon and edit me." ;

print #main.txtEdit, " I dare you!"

print #main.txtEdit, "Or just start typing to replace me."

print #main.txtEdit, "!selectall";

wait

[quit]

close #main

end

De tekst die naar de texteditorcontrol wordt geprint wordt getoond op de control.
Omdat er teksten mee vertoont worden, is het noodzakelijk om
indien niet een tekst getoond moet worden maar
het commando om die tekst dan vooraf te laten gaan door een ! wanneer zij
aan een tekstcontrole worden aangeboden. Zoals dat bij "! selectall" gebeurt.