Raspberry BASIC > Programming Challenges

GUI Login

(1/4) > >>

John Spikowski:
This round of the language challenge series is to create a desktop GUI login dialog. Be as creative as you wish. To get things started here is a Python /wx example.

Python WX


--- Code: Python ---import wx ########################################################################class LoginDialog(wx.Dialog):    """    Class to define login dialog    """     #----------------------------------------------------------------------    def __init__(self):        """Constructor"""        wx.Dialog.__init__(self, None, title="Login")        self.logged_in = False         # user info        user_sizer = wx.BoxSizer(wx.HORIZONTAL)         user_lbl = wx.StaticText(self, label="Username:")        user_sizer.Add(user_lbl, 0, wx.ALL|wx.CENTER, 5)        self.user = wx.TextCtrl(self)        user_sizer.Add(self.user, 0, wx.ALL, 5)         # pass info        p_sizer = wx.BoxSizer(wx.HORIZONTAL)         p_lbl = wx.StaticText(self, label="Password:")        p_sizer.Add(p_lbl, 0, wx.ALL|wx.CENTER, 5)        self.password = wx.TextCtrl(self, style=wx.TE_PASSWORD|wx.TE_PROCESS_ENTER)        self.password.Bind(wx.EVT_TEXT_ENTER, self.onLogin)        p_sizer.Add(self.password, 0, wx.ALL, 5)         main_sizer = wx.BoxSizer(wx.VERTICAL)        main_sizer.Add(user_sizer, 0, wx.ALL, 5)        main_sizer.Add(p_sizer, 0, wx.ALL, 5)         btn = wx.Button(self, label="Login")        btn.Bind(wx.EVT_BUTTON, self.onLogin)        main_sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)         self.SetSizer(main_sizer)     #----------------------------------------------------------------------    def onLogin(self, event):        """        Check credentials and login        """        stupid_password = "pa$$w0rd!"        user_password = self.password.GetValue()        if user_password == stupid_password:            print ("You are now logged in!")            self.logged_in = True            self.Close()        else:            print ("Username or password is incorrect!") ########################################################################class MyPanel(wx.Panel):    """"""     #----------------------------------------------------------------------    def __init__(self, parent):        """Constructor"""        wx.Panel.__init__(self, parent)  ########################################################################class MainFrame(wx.Frame):    """"""     #----------------------------------------------------------------------    def __init__(self):        """Constructor"""        wx.Frame.__init__(self, None, title="Main App")        panel = MyPanel(self)         # Ask user to login        dlg = LoginDialog()        dlg.ShowModal()        authenticated = dlg.logged_in        if not authenticated:            self.Close()         self.Show() if __name__ == "__main__":    app = wx.App(False)    frame = MainFrame()    app.MainLoop() 

AIR:

--- Code: C ---/* logon.c *  * version 1.0 *  * GUI Logon Screen Challenge Submission * C version, using GTK+-3.0 * Written by Armando I. Rivera (AIR) *  * Compile:  gcc logon.c $(pkg-config --libs --cflags gtk+-3.0) -o logon*/ #include <gtk/gtk.h>  void onClick( GtkWidget *widget, gpointer   data ) {        gchar *stupid_password = "pa$$w0rd!";        gchar *user_password;        g_object_get(data,"text",&user_password,NULL);         if (g_strcmp0 (stupid_password,user_password) == 0) {                g_print("Your are now logged in!\n");                gtk_main_quit();        }else{                g_print("Username or Password is Incorrect!\n");        }} int main (int argc, char **argv) {        GtkWidget *mainWin, *lblUser, *lblPass, *txtUser, *txtPass;        GtkWidget *hbox, *vbox, *btnLogin;         gtk_init(&argc, &argv);         hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,6);        vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL,6);        mainWin = gtk_window_new(GTK_WINDOW_TOPLEVEL);         g_object_set(mainWin,                                "title","Login",                                "default-width",400,                                "resizable",FALSE,                                "window-position",GTK_WIN_POS_CENTER,                                "child",vbox,                                NULL);                g_object_set(vbox,"child",hbox,"margin",10,NULL);                lblUser = gtk_label_new("Username:");        lblPass = gtk_label_new("Password: ");                txtUser = gtk_entry_new();        txtPass = gtk_entry_new();                g_object_set(txtUser,"expand",TRUE,"text",g_get_user_name(),NULL);        g_object_set(txtPass,"expand",TRUE, "visibility", FALSE,NULL);         g_object_set(hbox,"child",lblUser,"child",txtUser,"spacing", 6, NULL);                hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL,6);        g_object_set(vbox,"child",hbox, NULL);        g_object_set(hbox,"child",lblPass,"child",txtPass,"spacing", 6, NULL);                 btnLogin = gtk_button_new_with_label("Login");        g_object_set(vbox,"child",btnLogin,NULL);         g_signal_connect (mainWin, "destroy", G_CALLBACK (gtk_main_quit), NULL);        g_signal_connect (btnLogin, "clicked", G_CALLBACK (onClick), txtPass);                gtk_widget_show_all(mainWin);        gtk_main();        return 0;}  
AIR.

John Spikowski:
8th (Jalih submission)


--- Code: Text ---requires gui var gui { guest: "pa$$w0rd!" } constant passwords : authenticate  "edit1" g:child g:text? passwords swap m:@ nip null? if    "User not found!" . cr    2drop  else    swap    "edit2" g:child g:text? nip s:= if      "Authenticated!" . cr      bye    else      "Username and password don't match!" . cr    then  then ; {  kind: "win",  buttons: 5,  title: "Login",  wide: 360,  high: 160,  resizable: false,  bg:"lightgray",  center: true,  init: ( gui ! ),  children:  [    {      kind: "box",      name: "frame",      bounds: "10, 10, parent.width-10, parent.height-10",      bg: "gray",      children:      [        {          kind: "label",          label: "Username:",          bounds: "parent.left, parent.top+10, 80, top+24 ",          name: "lbl1"         },        {          kind: "edit",          bounds: "lbl1.right+10, lbl1.top, parent.width-10, top+24",          name: "edit1",          max-text: 32        },        {          kind: "label",          label: "Password:",          bounds: "lbl1.left, lbl1.bottom+10, 80, top+24 ",          name: "lbl2"         },        {          kind: "edit",          bounds: "edit1.left, lbl2.top, parent.width-10, top+24",          name: "edit2",          max-text: 32,          password-char: "*"        },        {          kind: "btn",          label: "Login",          bg: "darkgray",          bounds: "lbl2.left, lbl2.bottom+20, edit2.right, top+30",          name: "button",          tooltip: "Login to account",          click: ' authenticate        }      ]    }  ]} var, gui-desc : app:main  gui-desc @ g:new ; 

John Spikowski:
ScriptBasic


--- Code: Script BASIC ---' ScriptBasic / IUP - Login - JRS IMPORT iup.bas SUB login_clicked  uid = Iup::GetAttribute(uidtxt,"VALUE")  pwd = Iup::GetAttribute(pwdtxt,"VALUE")  IF uid = "John" AND pwd = "Spikowski" THEN    Iup::Hide(errlbl)    Iup::Message("Login",  "Login Successful")    Iup::ExitLoop = TRUE  ELSE    Iup::Show(errlbl)    Iup::SetFocus(uidtxt)  END IFEND SUB SUB show_password  showcb = Iup::GetAttribute(showpwd, "VALUE")  IF showcb = "ON" THEN    Iup::SetAttribute(pwdtxt, "PASSWORD", "NO")  ELSE    Iup::SetAttribute(pwdtxt, "PASSWORD", "YES")  END IFEND SUB SUB Win_exit  Iup::ExitLoop = TRUEEND SUB Iup::Open()dlg = Iup::Create("dialog")Iup::SetAttributes(dlg, "TITLE=\"Login\", SIZE=200x200") vb = Iup::Create("vbox")hb1 = Iup::Create("hbox")piclbl = Iup::Create("label")Iup::SetAttribute(piclbl, "IMAGE", "./login.png")Iup::SetAttribute(piclbl, "EXPAND", "HORIZONTAL")Iup::SetAttribute(piclbl, "ALIGNMENT", "ACENTER:ATOP")Iup::Append(hb1, piclbl)Iup::Append(vb, hb1) hb2 = Iup::Create("hbox")errlbl = Iup::Create("label")Iup::SetAttribute(errlbl, "TITLE", "User ID / Password Incorrect")Iup::SetAttribute(errlbl, "FGCOLOR", "#ff0000")Iup::SetAttribute(errlbl, "EXPAND", "HORIZONTAL")Iup::SetAttribute(errlbl, "ALIGNMENT", "ACENTER")Iup::Hide(errlbl)Iup::Append(hb2, errlbl)Iup::Append(vb, hb2) hb3 = Iup::Create("hbox")Iup::SetAttribute(hb3, "MARGIN", "20x10")Iup::SetAttribute(hb3, "GAP", "5")vb1 = Iup::Create("vbox")Iup::SetAttribute(vb1, "GAP", "15")uidlbl = Iup::Create("label")Iup::SetAttribute(uidlbl, "TITLE", "User ID")Iup::Append(vb1, uidlbl)pwdlbl = Iup::Create("label")Iup::SetAttribute(pwdlbl, "TITLE", "Password")Iup::Append(vb1, pwdlbl)Iup::Append(hb3, vb1)vb2 = Iup::Create("vbox")uidtxt = Iup::Create("text")Iup::SetAttribute(uidtxt, "SIZE", "85x")Iup::Append(vb2, uidtxt)pwdtxt = Iup::Create("text")Iup::SetAttribute(pwdtxt, "PASSWORD", "YES")Iup::SetAttribute(pwdtxt, "SIZE", "85x")Iup::Append(vb2, pwdtxt)Iup::Append(hb3, vb2)Iup::Append(vb, hb3) hb4 = Iup::Create("hbox")Iup::SetAttribute(hb4, "MARGIN", "35x")showpwd = Iup::Create("toggle")Iup::SetAttribute(showpwd, "TITLE", "Show Password?")Iup::Append(hb4, showpwd)Iup::Append(vb, hb4) hb5 = Iup::Create("hbox")Iup::SetAttribute(hb5, "MARGIN", "40x10")loginbut = Iup::Create("button")Iup::SetAttribute(loginbut, "TITLE", "Login")Iup::SetAttribute(loginbut, "EXPAND", "HORIZONTAL")iup::Append(hb5, loginbut)iup::Append(vb, hb5) iup::Append(dlg, vb) Iup::SetCallback(dlg,"CLOSE_CB",ADDRESS(Win_exit()))Iup::SetCallback(loginbut, "ACTION", ADDRESS(login_clicked()))Iup::SetCallback(showpwd, "ACTION", ADDRESS(show_password())) Iup::Show(dlg)Iup::MainLoop()Iup::Close() 

John Spikowski:
C Update (AIR submission)


--- Code: C ---* logon2.c *  * version 1.1 *  * GUI Logon Screen Challenge Submission * C version, using GTK+-3.0 *  * Written by Armando I. Rivera (AIR) *  * Compile:  gcc logon2.c $(pkg-config --libs --cflags gtk+-3.0) -o logon2*/  #include <gtk/gtk.h> GtkWidget *err_label; void onClick( GtkWidget *widget, gpointer   data ) {    gchar *stupid_password = "pa$$w0rd!";    gchar *user_password;    g_object_get(data,"text",&user_password,NULL);     if (g_strcmp0 (stupid_password,user_password) == 0) {        g_print("Your are now logged in!\n");        gtk_main_quit();    }else{        gtk_label_set_markup(GTK_LABEL(err_label), "<span color=\"red\" font_desc=\"16.0\">** Invalid Password **</span>");        g_print("Username or Password is Incorrect!\n");     }} int main( int argc, char *argv[]){    GtkWidget *window, *layout, *image, *btnLogin;    GtkWidget *lblUser, *lblPass, *txtUser, *txtPass;     gtk_init(&argc, &argv);        layout = gtk_layout_new(NULL, NULL);     window = gtk_window_new(GTK_WINDOW_TOPLEVEL);    g_object_set(window,                "title","Login",                "default-width",660,                "default-height",370,                "resizable",FALSE,                "window-position",GTK_WIN_POS_CENTER,                "child",layout,                "decorated",0,                NULL);      image = gtk_image_new_from_file("logon.png");    g_object_set(layout,"child",image,"margin",10,NULL);        lblUser = gtk_label_new("");    lblPass = gtk_label_new("");    err_label = gtk_label_new("");    g_object_set(err_label,"width-request",270,NULL);        gtk_label_set_markup(GTK_LABEL(lblUser), "<span font_desc=\"16.0\">Username:</span>");    gtk_label_set_markup(GTK_LABEL(lblPass), "<span font_desc=\"16.0\">Password:</span>");        txtUser = gtk_entry_new();    txtPass = gtk_entry_new();            g_object_set(txtPass,"visibility", FALSE,NULL);        btnLogin = gtk_button_new_with_label("Login");    g_object_set(btnLogin,"width-request",170,NULL);      gtk_layout_put(GTK_LAYOUT(layout), lblUser, 330, 112);    gtk_layout_put(GTK_LAYOUT(layout), lblPass, 330, 162);    gtk_layout_put(GTK_LAYOUT(layout), txtUser, 460, 110);    gtk_layout_put(GTK_LAYOUT(layout), txtPass, 460, 160);    gtk_layout_put(GTK_LAYOUT(layout), btnLogin, 460, 210);    gtk_layout_put(GTK_LAYOUT(layout), err_label, 300, 16);     g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);    g_signal_connect (btnLogin, "clicked", G_CALLBACK (onClick), txtPass);     gtk_widget_show_all(window);     gtk_main();     return 0;} 

Navigation

[0] Message Index

[#] Next page

Go to full version