Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
AttributeError: 'str' object has no attribute 'set'
#1
Hola, tengo dos codigos en "def asignaturasClick3(event):" que no logro mostrar el  campo codigoAsig en el formulario, para poder hacer una actualizacion  en la opcion "def actualizar3(self):" .

return self.func(*args)
      ^^^^^^^^^^^^^^^^
"primer codigo"
codigoAsig.set(codigoAsig[0])
^^^^^^^^^^^^^^
AttributeError: 'list' object has no attribute 'set'
 
"segundo codigo"
codigoAsig.set(str(tvasignaturas3.item(codigoAsig,"values")[0]))
^^^^^^^^^^^^^^
AttributeError: 'str' object has no attribute 'set'

Código:
import tkinter as tk
from tkinter import StringVar, font, ttk
from tkinter.constants import CENTER, W, E, N, S
from idlelib.tooltip import Hovertip

from tkinter import *
from tkinter import ttk
import pymysql
import pymysql.cursors
import mysql.connector
from conexion3 import *

from tkinter import Menu 
ventana = tk.Tk() 
#usa archivo conexion3 y se conecta a universidad4.sql

#ventana=Tk()
ventana.geometry("1300x670+0+0")
ventana.title("            M E N U       P R I N C I P A L")
ventana.iconbitmap("book.ico")
ventana.resizable(0,0)

def mant_Asignaturas():
   
    db=DataBase()
    modificar=False
    codigoAsig=StringVar()
    nombre=StringVar()
    nPeriodos=StringVar()
    nomProfesor=StringVar()

    opts=StringVar()
    options=[]
    sql = "SELECT nombres, apellidos, titulo FROM profesores"
    db.cursor.execute(sql)
    ids = db.cursor.fetchall()
    for i in ids:
        #options.append(str(i[0])+" - "+i[1]+ " - "+i[2])           
        options.append(i[0]+" - "+i[1]+ " - "+i[2])         

#############################################################################
    def asignaturasClick3(event):
        srow = tvasignaturas3.focus()
        data = tvasignaturas3.item(srow)
        #global codigoAsig
        codigoAsig = data['values']
        #codigoAsig.set(codigoAsig[0])
        nombre.set(codigoAsig[1])
        nPeriodos.set(codigoAsig[2])
        nomProfesor.set(codigoAsig[3])
        print("codigo click3", codigoAsig[0:5])
     
    def ignaturasClick3(event):
        try:
            codigoAsig=tvasignaturas3.selection()[0]
            if (codigoAsig)!="":
                #codigoAsig.set(str(tvasignaturas3.item(codigoAsig,"values")[0]))
                #codigoAsig.set(tvasignaturas3.item(codigoAsig,"text")[0])
                nombre.set(str(tvasignaturas3.item(codigoAsig, "values")[1]))
                nPeriodos.set(str(tvasignaturas3.item(codigoAsig, "values")[2]))
                nomProfesor.set(str(tvasignaturas3.item(codigoAsig, "values")[3]))
                print("codigo click3", codigoAsig[0:5])
            else:
                pass
        except IndexError:
            pass
##################################################################################################

    #def asignaturasClick3(event):
    #    srow = tvasignaturas3.focus()
    #    data = tvasignaturas3.item(srow)
    #    global codigoAsig
    #    codigoAsig = data['values']
    #    #codigoAsig.set(codigoAsig[0])
    #    nombre.set(codigoAsig[1])
    #    nPeriodos.set(codigoAsig[2])
    #    nomProfesor.set(codigoAsig[3])
    #    lblCodigo2=Label(marco3, text="Codigo")
    #    lblCodigo2.grid(column=0, row=0, padx=5, pady=5)
    #    txtCodigo2=Entry(marco3, width=50, textvariable=codigoAsig[0:5])
    #    print("codigo click3", codigoAsig[0:5])
    #    txtCodigo2.grid(column=1, row=0)   


    marco3=LabelFrame(ventana, text="Formulario ingreso de asignatura")
    marco3.place(x=5,y=20, width=1100, height=600)
     
    lblCodigo=Label(marco3, text="Codigo").grid(column=0, row=0, padx=5, pady=5)
    txtCodigo=Entry(marco3, width=50, textvariable=codigoAsig)
    txtCodigo.insert(0,"")
    txtCodigo.focus_set()
    txtCodigo.grid(column=1, row=0)

    lblNombre=Label(marco3, text="Nombre asignatura").grid(column=0, row=1, padx=5, pady=5)
    txtNombre=Entry(marco3, width=50, textvariable=nombre)
    txtNombre.grid(column=1, row=1)
   
    lblNPeriodos=Label(marco3, text="N° Periodos").grid(column=0, row=2, padx=5, pady=5)
    txtNPeriodos=Entry(marco3, width=50, textvariable=nPeriodos)
    txtNPeriodos.grid(column=1, row=2)
    lblNomProfesor=Label(marco3, text="Nombre profesor")
    lblNomProfesor.grid(column=0, row=3, padx=5, pady=5)
    txtNomProfesor=Entry(marco3, width=50, textvariable=opts)
    nomProfesor=opts
    txtNomProfesor.grid(column=1, row=3)
    mycombobox3=ttk.Combobox(ventana, textvariable=opts, width=30)
    mycombobox3.place(x=270,y=135,width=305,heigh=20)
    mycombobox3['values'] = ids
   
    btnNuevo3=Button(marco3, text="Guardar", command=lambda: nuevo3(mant_Asignaturas))
    btnNuevo3.grid(column=8, row=50)
    btnModificar3=Button(marco3, text="Elegir registro", command=lambda: actualizar3(mant_Asignaturas))
    hovertip = Hovertip(btnModificar3, "Permite modificar, si asi lo requiere el usuario")
    btnModificar3.grid(column=8, row=60)

    btnEliminar3=Button(marco3, text="Eliminar", command=lambda: eliminar3())
    btnEliminar3.grid(column=8, row=70)
    btnCancelar3=Button(marco3, text="Cancelar", command=lambda: limpiar3())
    btnCancelar3.grid(column=8, row=80)
    btnSalir3=Button(marco3, text="Salir", command=ventana.destroy)
    btnSalir3.grid(column=8, row=90)
   
    lblMensaje=Label(marco3, text="Aqui van los mensajes Asignaturas ", fg="blue")
    lblMensaje.grid(column=0, row=12, columnspan=4)
   
    tvasignaturas3=ttk.Treeview(marco3, selectmode=NONE)
    tvasignaturas3["columns"]=("CODIGOASIG", "NOMBRE", "NPERIODOS", "NOMPROFESOR",)
###############################################
    #tvasignaturas3.column("#0", width=0, stretch=NO)
    tvasignaturas3.column("CODIGOASIG", width=50, anchor=CENTER)
##########################################
    tvasignaturas3.column("CODIGOASIG", width=0, stretch=NO)
    tvasignaturas3.column("NOMBRE", width=200, anchor=CENTER)
    tvasignaturas3.column("NPERIODOS", width=200, anchor=CENTER)
    tvasignaturas3.column("NOMPROFESOR", width=200, anchor=CENTER)

#########################################################################
    #tvasignaturas3.heading("#0", text="")
    tvasignaturas3.heading("CODIGOASIG", text="codigo asignatura", anchor=CENTER)
###########################################################################
    tvasignaturas3.heading("#0", text="CODIGO ASIGNATURA")
    tvasignaturas3.heading("NOMBRE", text="NOMBRE ASIGNATURA", anchor=CENTER)
    tvasignaturas3.heading("NPERIODOS", text="N°PERIODOS", anchor=CENTER)
    tvasignaturas3.heading("NOMPROFESOR", text="NOMBRE PROFESOR", anchor=CENTER)
   
    tvasignaturas3.grid(column=0, row=15, columnspan=4, padx=5)
    tvasignaturas3.bind("<<TreeviewSelect>>", asignaturasClick3)

    asignaturasViewScrollbar=ttk.Scrollbar(marco3, orient="vertical",command=tvasignaturas3.yview)
    tvasignaturas3.configure(yscroll=asignaturasViewScrollbar.set)
    asignaturasViewScrollbar.grid(row=15,column=5,sticky="ns")   

    def modificarFalse():
        global modificar
        modificar=False
        tvasignaturas3.config(selectmode=NONE)
        btnNuevo3.config(text="Guardar")
        btnModificar3.config(text="Elegir registro")
        btnEliminar3.config(state=DISABLED)

    def modificarTrue():
        global modificar
        modificar=True
        tvasignaturas3.config(selectmode=BROWSE)
        btnNuevo3.config(text="Nuevo")
        btnModificar3.config(text="Modificando")
        btnEliminar3.config(state=NORMAL)
   
    def validar3():
        print("validarr")
        return len(codigoAsig.get()) and len(nombre.get()) and len(nPeriodos.get()) and len(nomProfesor.get())

    def limpiar3():
        codigoAsig.set("")
        nombre.set("")
        nPeriodos.set("")
        nomProfesor.set("")
       
    def vaciar_tabla3():
        filas=tvasignaturas3.get_children()
        for fila in filas:
            tvasignaturas3.delete(fila)

    def llenar_tabla3():
        vaciar_tabla3()
        sql="select * from asignatur"
        db.cursor.execute(sql)
        filas=db.cursor.fetchall()
        for fila in filas:
            codigoAsig=fila[0]
            tvasignaturas3.insert("", END, codigoAsig, text=codigoAsig, values= fila)

    def nuevo3(self):
        if modificar==False:
            print("antes de validar nuevo")
            if validar3():
                val=(codigoAsig.get(), nombre.get(), nPeriodos.get(), nomProfesor.get())   
                sql="insert into asignatur (codigoAsig, nombre, nPeriodos, nomProfesor) values (%s, %s, %s, %s)"   
                db.cursor.execute(sql, val)
                print("los datos sql--->", (val))
                db.connection.commit()
                lblMensaje.config(text="Se a guardado asignatura correctamente", fg="green")
                llenar_tabla3()
                limpiar3()
            else:
                lblMensaje.config(text="los campos no deben estar vacios", fg="red")
        else:
            modificarFalse()             
   
    def actualizar3(self):
        if modificar==True:
            print("despues de modificar3333")   
            if validar():
#def updatepaciente(rut, nombre, apellido, email, telefono):
#sql="UPDATE paciente SET nombre='"+str(nombre)+"', apellido='"+str(apellido)+"', email='"+str(email)+"', telefono="+telefono+" WHERE rut='"+str(rut)+"';"
                codigoAsig=tvasignaturas3.selection()[0]
                print("paso el tvasignaturas", codigoAsig)
                val=(codigoAsig.get(), nombre.get(), nPeriodos.get(), nomProfesor.get()) 
                sql="update asignatur set codigoAsig=%s, nombre=%s, nPeriodos=%s, nomProfesor=%s where codigoAsig='"+str(codigoAsig)+"';"   
            #sql="update asignatur set codigoAsig=%s, nombre=%s, nPeriodos=%s, nomProfesor=%s where codigoAsig="+codigoAsig   
        #sql="update asignatur set codigoAsig='"+str(codigoAsig)+"', nombre='"+str(nombre)+"', nPeriodos='"+str(nPeriodos)+"', nomProfesor='"+str(nomProfesor)+"' where codigoAsig='"+str(codigoAsig)+"';"   
                print("el sql:::", sql)
                db.cursor.execute(sql, val)
                db.connection.commit()
                lblMensaje.config(text="Se a actualizado una asignatura correctamente", fg="bluen")
                llenar_tabla3()
                limpiar3()
            else:
                lblMensaje.config(text="Ingrese datos, no deben estar vacios", fg="red")
        else:
            modificarTrue()

    def eliminar3():
        try:
            codigoAsig=tvasignaturas3.selection()[0]
            if len(codigoAsig)>0:
                sql="delete from asignatur where codigoAsig='"+str(codigoAsig)+"';"   
                db.cursor.execute(sql)
                db.connection.commit()
                tvasignaturas3.delete(codigoAsig)
                lblMensaje.config(text="Se a eliminado el registro")
                limpiar3()
            else:
                lblMensaje.config(text="Seleccione un registro para eliminar")
        except IndexError:
            pass       
   
    llenar_tabla3()
    ventana.mainloop()

def mant_Alumnos():
    pass
def mant_Hist_Alumnos():
    pass
def mant_Malla():
    pass
def mant_Profesores():
    pass


barraMenu=Menu(ventana)
ventana.config(menu=barraMenu) ###nueva linea

mnuMantencion=Menu(barraMenu)
mnuProcesos=Menu(barraMenu)
mnuConsulta=Menu(barraMenu)
mnuMantencion.add_command(label="Alumnos", command=mant_Alumnos)
mnuMantencion.add_command(label="Asignaturas", command=mant_Asignaturas)
mnuMantencion.add_command(label="Historico", command=mant_Hist_Alumnos)
mnuMantencion.add_command(label="Malla", command=mant_Malla)
mnuMantencion.add_command(label="Profesores", command=mant_Profesores)

mnuMantencion.add_separator()
mnuMantencion.add_command(label="Salir", command=ventana.destroy)

mnuProcesos.add_command(label="Cambio de semestre")
mnuConsulta.add_command(label="Alumnos por Asignatura")
mnuConsulta.add_command(label="Alumnos por año de ingreso")
mnuConsulta.add_command(label="Asignaturas")
mnuConsulta.add_command(label="Profesores")
barraMenu.add_cascade(label="Mantencion", menu=mnuMantencion)
barraMenu.add_cascade(label="Procesos", menu=mnuProcesos)
barraMenu.add_cascade(label="Consulta", menu=mnuConsulta)
barraMenu.add_command(label="Salir", command=ventana.destroy)

ventana.mainloop()


Archivos adjuntos
.txt   M_Asignatura2.txt (Tamaño: 11,76 KB / Descargas: 3)
Responder
#2
Hola.

Estás tratando a tu variable codigoAsig como un StringVar cuando en realidad es una cadena o una lista. Probablemente en esta línea estés cambiando el tipo de dato:

Código:
codigoAsig = data['values']

Deberías usar en ese caso un nombre de variable distinto.

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
Gracias.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)