Raspberry BASIC > Programming Challenges
GUI Login
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