Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
contraseñas login y bases de datos postgresql
#1
Buenas:

Como dice el título estoy teniendo problemas a la hora de crear una pequeña aplicación de login basada en base de datos.

En principio todo funciona correctamente siempre y cuando indiques la contraseña correcta, pero si te equivocas y tratas de rectificar el resultado es que siempre aparece el mensaje de contraseña no válida como si fuera un bucle a pesar de que la contraseña que estás introduciendo de nuevo corrigiendo la anterior sí es correcta. (No sé si me explico bien). ¿Puede que necesite hacer una "reconexión a la base de datos en la sentecia elif?.

Como una imagen vale mil palabras os pongo el código que estoy usando. Esta es la función que se conecta a la base de datos y comprueba que la contraseña es correcta).

  1. def abrisapp():
  2.  
  3. # PARAMETERS CONNECTION
  4.  
  5. psql_HOST = "127.0.0.1"
  6. psql_PORT = "5432"
  7. psql_USER = "postgres"
  8. psql_PASS = "2208"
  9. psql_DB = "cronas"
  10.  
  11. usur = self.comusu.get()
  12. valid = self.enusu.get()
  13. CAT = self.comusu.get()
  14. query = "SELECT passwor FROM claves WHERE usuario="+"'" + usur + "'" + ";"
  15.  
  16. try:
  17. connstr = "host=%s port=%s user=%s password=%s dbname=%s" % (psql_HOST, psql_PORT, psql_USER, psql_PASS, psql_DB)
  18. conn = psycopg2.connect(connstr)
  19. cur = conn.cursor()
  20. cur.execute(query)
  21. row = cur.fetchall()
  22. conn.commit()
  23. cur.close()
  24. conn.close()
  25.  
  26. def printpasswor():
  27.  
  28. self.usuval.insert(0, row)
  29.  
  30. if self.usuval.get() == valid:
  31.  
  32. #CAT = self.comusu.get()
  33.  
  34. self.prinapp = Tk()
  35. self.prinapp.title("CENTRO DE CONTROL DE DATOS")
  36. self.prinapp.geometry('1680x1050')
  37. self.prinapp.resizable(False, False)
  38. self.prinapp.protocol("WM_DELETE_WINDOW", nocerrprinapp)
  39.  
  40.  
  41. # FRAMES PRINAPP
  42.  
  43. self.frameprinapp1 = ttk.Frame(self.prinapp, style="Frames.TFrame")
  44. self.frameprinapp1.grid(row=0, column=0)
  45.  
  46. self.frameprinapp2 = ttk.Frame(self.prinapp, style="Frames.TFrame")
  47. self.frameprinapp2.grid(row=1, column=0)
  48.  
  49. # LABELS PRINAPP
  50.  
  51. self.labprinappcat = ttk.Label(self.frameprinapp1, text='C.A.T', font=('Gentium', 12, 'bold'), relief='groove', borderwidth=5, background='light green')
  52. self.labprinappcat.grid(row=0, column=0, pady=3)
  53.  
  54. self.labprinappCAT = ttk.Label(self.frameprinapp1, text=CAT, font=('Gentium', 20, 'bold'), relief='sunken', background='#EAFF92', borderwidth=2, foreground='dark blue')
  55. self.labprinappCAT.grid(row=1, column=0, padx=5)
  56.  
  57.  
  58. # MENU PRINAPP
  59.  
  60. self.menubar = Menu(self.prinapp, tearoff = False, font=('Gentium', 10, 'bold'), relief='ridge', activebackground='light green')
  61. self.menuprinapp = Menu(self.menubar, tearoff = False, font=('Gentium', 10, 'bold'), activebackground='light green')
  62. self.menuprinapp1 = Menu(self.menubar, tearoff = False, font=('Gentium', 10, 'bold'), activebackground='light green')
  63. self.menuprinapp2 = Menu(self.menubar, tearoff = False, font=('Gentium', 10, 'bold'), activebackground='light green')
  64. self.menuprinapp3 = Menu(self.menubar, tearoff = False, font=('Gentium', 10, 'bold'), activebackground='light green')
  65. self.menuabci = Menu(self.menuprinapp, tearoff = False, font=('Gentium', 10, 'bold'), activebackground='light green')
  66. self.menuabci1 = Menu(self.menuprinapp, tearoff = False, font=('Gentium', 10, 'bold'), activebackground='light green')
  67. self.menuabci2 = Menu(self.menuprinapp, tearoff = False, font=('Gentium', 10, 'bold'), activebackground='light green')
  68.  
  69. self.menuprinapp.add_cascade(label='Centro Control Logístico', menu=self.menuabci)
  70. self.menuprinapp.add_cascade(label='Centro Control Geográfico', menu=self.menuabci1)
  71. self.menuprinapp1.add_command(label='Ir a ...')
  72.  
  73. self.menuabci.add_command(label= 'Abrir', command=abreCCL, state='disabled')
  74. self.menuabci.add_command(label= 'Cerrar', command=cierraCCL)
  75.  
  76. self.menuabci1.add_command(label= 'Abrir')
  77. self.menuabci1.add_command(label= 'Cerrar')
  78.  
  79.  
  80. self.menuprinapp.add_separator()
  81. self.menuprinapp.add_command(label= "Salir de Aplicación", command=quitapp)
  82.  
  83. self.menubar.add_cascade(label = "Centros de Control", menu=self.menuprinapp)
  84. self.menubar.add_cascade(label = "Circulares", menu=self.menuprinapp1)
  85. self.menubar.add_cascade(label = "Procedimientos", menu=self.menuprinapp2)
  86. self.menubar.add_cascade(label = "Manual", menu=self.menuprinapp3)
  87.  
  88. self.prinlog.destroy()
  89. self.prinapp.configure(menu=self.menubar)
  90. openCCL(self)
  91.  
  92. elif self.usuval.get() != valid:
  93. messagebox.showinfo(message='La contraseña no es válida', title='ADVERTENCIA')
  94.  
  95. printpasswor()
  96.  
  97. except:
  98. print("Error en la conexión a la base de datos")
Responder
#2
Hola. Es un poco complicado determinarlo porque no tiene indentación el código. No obstante, parece que en esta línea:

  1. self.usuval.insert(0, row)


estás insertando la contraseña que obtenés de la base de datos en la misma caja de texto donde se supone el usuario debe escribir su contraseña, lo cual suena un poco extraño. Por otro lado, ¿de dónde viene la variable valid con la que hacés la comparación?
Responder
#3
Anda leches si falta la mitad del código. A ver lo pongo entero otra vez:
  1. class App112:
  2.  
  3.  
  4.  
  5. def __init__(self):
  6.  
  7.  
  8.  
  9. self.prinlog = Tk()
  10.  
  11. self.prinlog.title("BIENVENID@S A ...")
  12.  
  13. self.prinlog.geometry('800x600+500+200')
  14.  
  15. self.prinlog.resizable(False, False)
  16.  
  17.  
  18.  
  19. # ENTRY PRINAPP
  20.  
  21.  
  22.  
  23. self.usuval = ttk.Entry(self.prinlog)
  24.  
  25. #self.usuval.grid(row=0, column=0)
  26.  
  27.  
  28.  
  29. def quitapp():
  30.  
  31. try:
  32.  
  33. self.prinapp.destroy()
  34.  
  35. self.rootccl.destroy()
  36.  
  37.  
  38.  
  39. except TclError:
  40.  
  41. pass
  42.  
  43.  
  44.  
  45. def abreCCL():
  46.  
  47.  
  48.  
  49. self.menuabci.entryconfigure("Abrir", state='disabled')
  50.  
  51. self.menuabci.entryconfigure("Cerrar", state='normal')
  52.  
  53. openCCL(self)
  54.  
  55.  
  56.  
  57.  
  58.  
  59. def cierraCCL():
  60.  
  61. try:
  62.  
  63. self.rootccl.destroy()
  64.  
  65. self.menuabci.entryconfigure("Abrir", state='normal')
  66.  
  67. self.menuabci.entryconfigure("Cerrar", state='disabled')
  68.  
  69.  
  70.  
  71. except TclError:
  72.  
  73. pass
  74.  
  75.  
  76.  
  77. except AttributeError:
  78.  
  79. pass
  80.  
  81.  
  82.  
  83. # FUNTIONS LOGIN
  84.  
  85.  
  86.  
  87. def salirlog():
  88.  
  89. self.prinlog.destroy()
  90.  
  91.  
  92.  
  93. def nocerrprinlog():
  94.  
  95. pass
  96.  
  97.  
  98.  
  99. def abrisapp():
  100.  
  101.  
  102.  
  103. def nocerrprinapp():
  104.  
  105. pass
  106.  
  107.  
  108.  
  109. # PARAMETERS CONNECTION
  110.  
  111.  
  112.  
  113. psql_HOST = "127.0.0.1"
  114.  
  115. psql_PORT = "5432"
  116.  
  117. psql_USER = "postgres"
  118.  
  119. psql_PASS = "2208"
  120.  
  121. psql_DB = "cronas"
  122.  
  123.  
  124.  
  125. usur = self.comusu.get()
  126.  
  127. valid = self.enusu.get()
  128.  
  129. CAT = self.comusu.get()
  130.  
  131. query = "SELECT passwor FROM claves WHERE usuario="+"'" + usur + "'" + ";"
  132.  
  133.  
  134.  
  135. try:
  136.  
  137. connstr = "host=%s port=%s user=%s password=%s dbname=%s" % (psql_HOST, psql_PORT, psql_USER, psql_PASS, psql_DB)
  138.  
  139. conn = psycopg2.connect(connstr)
  140.  
  141. cur = conn.cursor()
  142.  
  143. cur.execute(query)
  144.  
  145. row = cur.fetchall()
  146.  
  147. conn.commit()
  148.  
  149. cur.close()
  150.  
  151. conn.close()
  152.  
  153.  
  154.  
  155. def printpasswor():
  156.  
  157.  
  158.  
  159. self.usuval.insert(0, row)
  160.  
  161.  
  162.  
  163. if self.usuval.get() == valid:
  164.  
  165.  
  166.  
  167. #CAT = self.comusu.get()
  168.  
  169.  
  170.  
  171. self.prinapp = Tk()
  172.  
  173. self.prinapp.title("CENTRO DE CONTROL DE DATOS")
  174.  
  175. self.prinapp.geometry('1680x1050')
  176.  
  177. self.prinapp.resizable(False, False)
  178.  
  179. self.prinapp.protocol("WM_DELETE_WINDOW", nocerrprinapp)
  180.  
  181.  
  182.  
  183.  
  184.  
  185. # FRAMES PRINAPP
  186.  
  187.  
  188.  
  189. self.frameprinapp1 = ttk.Frame(self.prinapp, style="Frames.TFrame")
  190.  
  191. self.frameprinapp1.grid(row=0, column=0)
  192.  
  193.  
  194.  
  195. self.frameprinapp2 = ttk.Frame(self.prinapp, style="Frames.TFrame")
  196.  
  197. self.frameprinapp2.grid(row=1, column=0)
  198.  
  199.  
  200.  
  201. # LABELS PRINAPP
  202.  
  203.  
  204.  
  205. self.labprinappcat = ttk.Label(self.frameprinapp1, text='C.A.T', font=('Gentium', 12, 'bold'), relief='groove', borderwidth=5, background='light green')
  206.  
  207. self.labprinappcat.grid(row=0, column=0, pady=3)
  208.  
  209.  
  210.  
  211. self.labprinappCAT = ttk.Label(self.frameprinapp1, text=CAT, font=('Gentium', 20, 'bold'), relief='sunken', background='#EAFF92', borderwidth=2, foreground='dark blue')
  212.  
  213. self.labprinappCAT.grid(row=1, column=0, padx=5)
  214.  
  215.  
  216.  
  217.  
  218.  
  219. # MENU PRINAPP
  220.  
  221.  
  222.  
  223. self.menubar = Menu(self.prinapp, tearoff = False, font=('Gentium', 10, 'bold'), relief='ridge', activebackground='light green')
  224.  
  225. self.menuprinapp = Menu(self.menubar, tearoff = False, font=('Gentium', 10, 'bold'), activebackground='light green')
  226.  
  227. self.menuprinapp1 = Menu(self.menubar, tearoff = False, font=('Gentium', 10, 'bold'), activebackground='light green')
  228.  
  229. self.menuprinapp2 = Menu(self.menubar, tearoff = False, font=('Gentium', 10, 'bold'), activebackground='light green')
  230.  
  231. self.menuprinapp3 = Menu(self.menubar, tearoff = False, font=('Gentium', 10, 'bold'), activebackground='light green')
  232.  
  233. self.menuabci = Menu(self.menuprinapp, tearoff = False, font=('Gentium', 10, 'bold'), activebackground='light green')
  234.  
  235. self.menuabci1 = Menu(self.menuprinapp, tearoff = False, font=('Gentium', 10, 'bold'), activebackground='light green')
  236.  
  237. self.menuabci2 = Menu(self.menuprinapp, tearoff = False, font=('Gentium', 10, 'bold'), activebackground='light green')
  238.  
  239.  
  240.  
  241. self.menuprinapp.add_cascade(label='Centro Control Logístico', menu=self.menuabci)
  242.  
  243. self.menuprinapp.add_cascade(label='Centro Control Geográfico', menu=self.menuabci1)
  244.  
  245. self.menuprinapp1.add_command(label='Ir a ...')
  246.  
  247.  
  248.  
  249. self.menuabci.add_command(label= 'Abrir', command=abreCCL, state='disabled')
  250.  
  251. self.menuabci.add_command(label= 'Cerrar', command=cierraCCL)
  252.  
  253.  
  254.  
  255. self.menuabci1.add_command(label= 'Abrir')
  256.  
  257. self.menuabci1.add_command(label= 'Cerrar')
  258.  
  259.  
  260.  
  261.  
  262.  
  263. self.menuprinapp.add_separator()
  264.  
  265. self.menuprinapp.add_command(label= "Salir de Aplicación", command=quitapp)
  266.  
  267.  
  268.  
  269. self.menubar.add_cascade(label = "Centros de Control", menu=self.menuprinapp)
  270.  
  271. self.menubar.add_cascade(label = "Circulares", menu=self.menuprinapp1)
  272.  
  273. self.menubar.add_cascade(label = "Procedimientos", menu=self.menuprinapp2)
  274.  
  275. self.menubar.add_cascade(label = "Manual", menu=self.menuprinapp3)
  276.  
  277.  
  278.  
  279. self.prinlog.destroy()
  280.  
  281. self.prinapp.configure(menu=self.menubar)
  282.  
  283. openCCL(self)
  284.  
  285.  
  286.  
  287. elif self.usuval.get() != valid:
  288.  
  289. messagebox.showinfo(message='La contraseña no es válida', title='ADVERTENCIA')
  290.  
  291.  
  292.  
  293. printpasswor()
  294.  
  295.  
  296.  
  297. except:
  298.  
  299. print("Error en la conexión a la base de datos")
  300.  
  301.  
  302.  
  303. # STYLES
  304.  
  305.  
  306.  
  307. # STYLE BUTTONS
  308.  
  309.  
  310.  
  311. self.stylebutacep = ttk.Style()
  312.  
  313. self.stylebutacep.configure("Butacep.TButton", relief = 'raised', borderwidth = 5, background ='dark green', foreground='white', font=('Ubuntu', 12, 'bold'))
  314.  
  315.  
  316.  
  317. self.stylebutcance = ttk.Style()
  318.  
  319. self.stylebutcance.configure("Butcance.TButton", relief = 'raised', borderwidth = 5, background ='red4', foreground='white', font=('Ubuntu', 12, 'bold'))
  320.  
  321.  
  322.  
  323. # STYLE COMBOBOX
  324.  
  325.  
  326.  
  327. self.bigfont = tkfont.Font(family="Ubuntu",size=14)
  328.  
  329. self.prinlog.option_add("*TCombobox*Listbox*Font", self.bigfont)
  330.  
  331.  
  332.  
  333. # STYLE CHECKBUTTONS
  334.  
  335.  
  336.  
  337. self.styleradio = ttk.Style()
  338.  
  339. self.styleradio.configure("Butrad.TCheckbutton", font=("Ubuntu", 12, 'bold'), relief='raised', borderwidth=2, foreground='dark blue')
  340.  
  341.  
  342.  
  343. # STYLE FRAMES
  344.  
  345.  
  346.  
  347. self.styleframe = ttk.Style()
  348.  
  349. self.styleframe.configure("Frames.TFrame", relief='ridge', borderwidth=5)
  350.  
  351.  
  352.  
  353. # LISTS LOGIN
  354.  
  355.  
  356.  
  357. self.usurlist = ["CJFP", "CEPC", "CMMR", "CMJD", "CBLD"]
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365. # LOGIN FRAME
  366.  
  367.  
  368.  
  369. self.frameprinlog = ttk.Frame(self.prinlog, width=800, height=600)
  370.  
  371. self.frameprinlog.grid(row=0, column=0)
  372.  
  373.  
  374.  
  375. self.canvas1 = Canvas(self.frameprinlog, width=800, height=600, background='black')
  376.  
  377. self.canvas1.grid(row=0, column=0, sticky=N+S+E+W)
  378.  
  379.  
  380.  
  381. self.peregrino = PhotoImage(file="/home/juan/Downloads/Peregrino.gif")
  382.  
  383.  
  384.  
  385. self.canvas1.create_image(400,300, image=self.peregrino, anchor='center')
  386.  
  387.  
  388.  
  389. self.framelogin_can= ttk.Frame(self.canvas1, style="Frames.TFrame")
  390.  
  391.  
  392.  
  393. self.canvas1.create_window(0,0, window=self.framelogin_can, anchor='nw')
  394.  
  395.  
  396.  
  397. self.comusu = ttk.Combobox(self.framelogin_can, width=5, font=('Ubuntu', 14))
  398.  
  399. self.comusu.grid(row=2, column=0, pady=5)
  400.  
  401. self.comusu["values"]= self.usurlist
  402.  
  403.  
  404.  
  405.  
  406.  
  407. self.eti1usu = ttk.Label(self.framelogin_can, text='USUARIO', background='light green', relief='ridge', borderwidth=2, font=('Gentium',14, 'bold'))
  408.  
  409. self.eti1usu.grid(row=1, column=0, pady=5)
  410.  
  411.  
  412.  
  413. self.eti2usu = ttk.Label(self.framelogin_can, text='CONTRASEÑA', background='light green', relief='ridge', borderwidth=2, font=('Gentium',14, 'bold'))
  414.  
  415. self.eti2usu.grid(row=3, column=0, pady=5, padx=5)
  416.  
  417.  
  418.  
  419. self.enusu = ttk.Entry(self.framelogin_can, width=10, font=('Ubuntu', 14, 'bold'), show='*')
  420.  
  421. self.enusu.grid(row=4, column=0, pady=5)
  422.  
  423.  
  424.  
  425. self.butusu = ttk.Button(self.framelogin_can, text='ACEPTAR', style ="Butacep.TButton", command=abrisapp)
  426.  
  427. self.butusu.grid(row=9, column=0, pady=5)
  428.  
  429.  
  430.  
  431. self.but1usu = ttk.Button(self.framelogin_can, text='CANCELAR', style = "Butcance.TButton", command=salirlog)
  432.  
  433. self.but1usu.grid(row=10, column=0, pady=5)
  434.  
  435.  
  436.  
  437. self.etiusu = ttk.Label(self.framelogin_can, text='LOGIN', font=('Ubuntu', 26, 'bold'), background='light blue', relief='ridge', borderwidth=5)
  438.  
  439. self.etiusu.grid(row=0, column=0, padx=10, pady=10)
  440.  
  441.  
  442.  
  443. self.prinlog.protocol("WM_DELETE_WINDOW", nocerrprinlog)
  444.  
  445.  
  446.  
  447. self.prinlog.mainloop()
  448.  
  449.  
  450.  
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459. def main():
  460.  
  461. my_app = App112()
  462.  
  463.  
  464.  
  465. if __name__ == '__main__':
  466.  
  467. main()



Vale, tengo un entry "virtual" (self.usuval) es decir está en la aplicación pero no está representado gráficamente porque no tiene .grid().



Hago esto porque por alguna razón que no entiendo, cuando intento obtener el campo de la contraseña de la base de datos me da error. Lo que hago es que dentro de ese entry "virtual", introduzco la contraseña obtenida del SELECT de la base de datos y desde ahí ya no me da ningún error y parece que detecta la contraseña correctamente. (Puede que sea toda esa vuelta la que me esté dando problemas, creo que tengo la solución pero aún no he podido probarlo. Sería el usar el comando cur.fetchone() en vez de el cur.fetchall() ya que este último me crea una lista y puede que sea eso lo que me esté dando el problema).



Bien, como digo todo funciona perfectamente si desde el principio introduces la contraseña correcta la app se abre sin problemas y todo funciona perfectamente. Si por alguna razón introduces la contraseña incorrecta también funciona correctamente y aparece el mensaje 'la contraseña no es válida'. Y aquí comienza el problema:



Si borras la contraseña incorrecta e intentas poner otra, por mucho que introduzcas la contraseña correcta siempre vuelve a aparecer el mensaje" 'la contraseña no es válida'. Es decir es como si ya no detectase el SELECT de la base de datos que introduje en el entry virtual.

Esto es por el problema de que el usuario pueda equivocarse al introducir la contraseña y quiero solucionarlo para que si la borre e introduzca la correcta le de acceso a la app.



Siento lo de la identación pero en teoría la misma es correcta ya que no me arroja ningún error.
Responder
#4
Efectivamente todo ese rodeo te está dando problemas. Simplemente guarda la contraseña de la base de datos así:

  1. password = cursor.fetchone()[0]


Y luego compara el texto ingresado por el usuario con esa variable.
Responder
#5
(07-09-2019, 07:23 PM)Francisco escribió: Efectivamente todo ese rodeo te está dando problemas. Simplemente guarda la contraseña de la base de datos así:

  1. password = cursor.fetchone()[0]


Y luego compara el texto ingresado por el usuario con esa variable.


Confirmado el problema era el entry "virtual" y el fetchall().



Ya funciona todo correctamente. (No lo he hecho exactamente como tú pero el resultado es óptimo).



Pongo aquí el ejemplo de como funciona todo correctamente por si alguien tiene el mismo problema. (Suponiendo que use postgresql y la identación correspondiente).



  1. # PARAMETERS CONNECTION
  2.  
  3.  
  4.  
  5. psql_HOST = "127.0.0.1"
  6.  
  7. psql_PORT = "5432"
  8.  
  9. psql_USER = "postgres"
  10.  
  11. psql_PASS = "2208"
  12.  
  13. psql_DB = "cronas"
  14.  
  15.            
  16.  
  17. usur = self.comusu.get()
  18.  
  19. passw = self.enusu.get()
  20.  
  21. CAT = self.comusu.get()
  22.  
  23. query = "SELECT passwor FROM claves WHERE usuario="+"'" + usur + "'" + ";"
  24.  
  25.  
  26.  
  27. try:
  28.  
  29. connstr = "host=%s port=%s user=%s password=%s dbname=%s" % (psql_HOST, psql_PORT, psql_USER, psql_PASS, psql_DB)
  30.  
  31. conn = psycopg2.connect(connstr)
  32.  
  33. cur = conn.cursor()
  34.  
  35. cur.execute(query)
  36.  
  37. row = cur.fetchone()[0]
  38.  
  39. conn.commit()
  40.  
  41. cur.close()
  42.  
  43. conn.close()
  44.  
  45.  
  46.  
  47. def printpasswor():
  48.  
  49.  
  50.  
  51. if row == passw:
  52.  
  53.  
  54.  
  55. self.prinapp = Tk()
  56.  
  57. self.prinapp.title("CENTRO DE CONTROL DE DATOS")
  58.  
  59. self.prinapp.geometry('1680x1050')
  60.  
  61. self.prinapp.resizable(False, False)
  62.  
  63. self.prinapp.protocol("WM_DELETE_WINDOW", nocerrprinapp)
  64.  
  65.  
  66.  
  67.  
  68.  
  69. # FRAMES PRINAPP
  70.  
  71.  
  72.  
  73. self.frameprinapp1 = ttk.Frame(self.prinapp, style="Frames.TFrame")
  74.  
  75. self.frameprinapp1.grid(row=0, column=0)
  76.  
  77.  
  78.  
  79. self.frameprinapp2 = ttk.Frame(self.prinapp, style="Frames.TFrame")
  80.  
  81. self.frameprinapp2.grid(row=1, column=0)
  82.  
  83.  
  84.  
  85. # LABELS PRINAPP
  86.  
  87.  
  88.  
  89. self.labprinappcat = ttk.Label(self.frameprinapp1, text='C.A.T', font=('Gentium', 12, 'bold'), relief='groove', borderwidth=5, background='light green')
  90.  
  91. self.labprinappcat.grid(row=0, column=0, pady=3)
  92.  
  93.  
  94.  
  95. self.labprinappCAT = ttk.Label(self.frameprinapp1, text=CAT, font=('Gentium', 20, 'bold'), relief='sunken', background='#EAFF92', borderwidth=2, foreground='dark blue')
  96.  
  97. self.labprinappCAT.grid(row=1, column=0, padx=5)
  98.  
  99.  
  100.  
  101.  
  102.  
  103. # MENU PRINAPP
  104.  
  105.  
  106.  
  107. self.menubar = Menu(self.prinapp, tearoff = False, font=('Gentium', 10, 'bold'), relief='ridge', activebackground='light green')
  108.  
  109. self.menuprinapp = Menu(self.menubar, tearoff = False, font=('Gentium', 10, 'bold'), activebackground='light green')
  110.  
  111. self.menuprinapp1 = Menu(self.menubar, tearoff = False, font=('Gentium', 10, 'bold'), activebackground='light green')
  112.  
  113. self.menuprinapp2 = Menu(self.menubar, tearoff = False, font=('Gentium', 10, 'bold'), activebackground='light green')
  114.  
  115. self.menuprinapp3 = Menu(self.menubar, tearoff = False, font=('Gentium', 10, 'bold'), activebackground='light green')
  116.  
  117. self.menuabci = Menu(self.menuprinapp, tearoff = False, font=('Gentium', 10, 'bold'), activebackground='light green')
  118.  
  119. self.menuabci1 = Menu(self.menuprinapp, tearoff = False, font=('Gentium', 10, 'bold'), activebackground='light green')
  120.  
  121. self.menuabci2 = Menu(self.menuprinapp, tearoff = False, font=('Gentium', 10, 'bold'), activebackground='light green')
  122.  
  123.  
  124.  
  125. self.menuprinapp.add_cascade(label='Centro Control Logístico', menu=self.menuabci)
  126.  
  127. self.menuprinapp.add_cascade(label='Centro Control Geográfico', menu=self.menuabci1)
  128.  
  129. self.menuprinapp1.add_command(label='Ir a ...')
  130.  
  131.  
  132.  
  133. self.menuabci.add_command(label= 'Abrir', command=abreCCL, state='disabled')
  134.  
  135. self.menuabci.add_command(label= 'Cerrar', command=cierraCCL)
  136.  
  137.  
  138.  
  139. self.menuabci1.add_command(label= 'Abrir')
  140.  
  141. self.menuabci1.add_command(label= 'Cerrar')
  142.  
  143.  
  144.  
  145.  
  146.  
  147. self.menuprinapp.add_separator()
  148.  
  149. self.menuprinapp.add_command(label= "Salir de Aplicación", command=quitapp)
  150.  
  151.  
  152.  
  153. self.menubar.add_cascade(label = "Centros de Control", menu=self.menuprinapp)
  154.  
  155. self.menubar.add_cascade(label = "Circulares", menu=self.menuprinapp1)
  156.  
  157. self.menubar.add_cascade(label = "Procedimientos", menu=self.menuprinapp2)
  158.  
  159. self.menubar.add_cascade(label = "Manual", menu=self.menuprinapp3)
  160.  
  161.  
  162.  
  163. self.prinlog.destroy()
  164.  
  165. self.prinapp.configure(menu=self.menubar)
  166.  
  167. openCCL(self)
  168.  
  169.  
  170.  
  171. else:
  172.  
  173. messagebox.showinfo(message='La contraseña no es válida', title='ADVERTENCIA')
  174.  
  175.  
  176.  
  177. printpasswor()
  178.  
  179.  
  180.  
  181. except:
  182.  
  183. print("Error en la conexión a la base de datos")




MUCHAS GRACIAS
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)