Está en la página 1de 4

import tkinter as tk

import xml.etree.ElementTree as ET

class maquinas:

def __init__(self):
self.mp = tk.Tk()
self.mp.title('Practica_1')
self.mp.geometry('670x450')
self.mp['bg'] = '#e0b0ff'

tree = ET.parse('archi_prueba.xml')
root = tree.getroot()
cont = 0

lista_elementos = root.find('listaMaquinas')

if lista_elementos.findall('Maquina') != None:

frame1 = tk.Frame(self.mp)
frame2 = tk.Frame(self.mp)
frame3 = tk.Frame(self.mp)
frame1.pack(side='left', padx=10, pady=10)
frame2.pack(side='left', padx=10, pady=10)
frame3.pack(side='left', padx=10, pady=10)

for i, elemento in enumerate(lista_elementos.findall('Maquina')):


cont += 1
nombreMa = elemento.find('nombre').text
subArchivo = tk.Button(self.mp, text="Maquina: "+nombreMa,
background="#4b1c71",
foreground="#ffffff", height=2, width=20,
font=("Courier New", 10, "bold"))

if i < 5:
subArchivo.pack(side='top', padx=10, pady=10, in_=frame2)
elif i >= 5 and i < 10:
subArchivo.pack(side='top', padx=10, pady=10, in_=frame1)
elif i<15:
subArchivo.pack(side='top', padx=10, pady=10, in_=frame3)
else:
print("Error")

subArchivo.config(command=lambda elemento=elemento:
self.irPines1(elemento))

else:
print("Ya no existen mas maquinas")

self.mp.mainloop()

def irPines1(self, elemento):


nombre = elemento.find('nombre').text
print("Carga para la máquina", nombre)

pines_maquina = []
for pin in elemento.findall('pin'):
elementos_pin = [elemento.text for elemento in
pin.findall('elementos/elemento')]
pines_maquina.append(elementos_pin)

elementos_xml = []
tree = ET.parse('archi_prueba.xml')
root = tree.getroot()
for elemento_xml in root.findall('listaElementos/elemento'):
elementos_xml.append(elemento_xml.find('simbolo').text)

compuestos = root.findall('listaCompuestos/compuesto')
for compuesto in compuestos:
elementos_compuesto = compuesto.find('elementos')
nombre_compuesto = compuesto.find('nombre').text

for maquina in root.findall('listaMaquinas/Maquina'):


elementos_maquina = []
for pin in maquina.findall('pin'):
elementos_pin = pin.find('elementos')
elementos_maquina.extend([e.text for e in
elementos_pin.findall('elemento')])
if all(e.text in elementos_maquina for e in
elementos_compuesto.findall('elemento')):
print(f"La máquina {maquina.find('nombre').text} puede crear el
compuesto {nombre_compuesto}")

else:
print(f"La máquina {maquina.find('nombre').text} no tiene los
elementos necesarios para crear el compuesto {nombre_compuesto}")

for i, elementos_pin in enumerate(pines_maquina):


if set(elementos_pin).issubset(elementos_xml):
print(f"Pin {i+1}: {elementos_pin}")
else:
print(f"Error: Al menos un elemento del pin {i+1} no existe
en el archivo XML.")
return

num_pines = int(elemento.find('numeroPines').text)
num_elementos = int(elemento.find('numeroElementos').text)

if num_pines == len(pines_maquina) and all(len(pin) == num_elementos for


pin in pines_maquina):
print("La cantidad de pines y elementos es correcta.")
tabla = TablaPines(elemento)
tabla.Mostrar_Creacion_Compuesto(compuesto)
else:
print("Error: La cantidad de pines o elementos no coincide con la
descripción en el archivo XML.")
return

class TablaPines:

def __init__(self, maquina):


self.maquina = maquina
self.pin_values = self.get_pin_values()
self.num_pins = len(self.pin_values)
self.current_cell = None
self.window = tk.Toplevel()
self.window.title(f"Pines de la máquina
{self.maquina.find('nombre').text}")
self.window.geometry("400x300")
self.window['bg'] = '#e0b0ff'

self.table_frame = tk.Frame(self.window, borderwidth=1, relief="solid")


self.table_frame.pack(pady=10)

self.Crear_Tabla()

def get_pin_values(self):
pines_maquina = []
for pin in self.maquina.findall('pin'):
elementos_pin = [elemento.text for elemento in
pin.findall('elementos/elemento')]
pines_maquina.append(elementos_pin)
return pines_maquina

def Crear_Tabla(self):
for i in range(self.num_pins):
pin_frame = tk.Frame(self.table_frame)
pin_frame.pack(pady=5)

pin_label = tk.Label(pin_frame, text=f"Pin {i+1}: ", width=10,


anchor="w")
pin_label.pack(side=tk.LEFT)

value_frame = tk.Frame(pin_frame)
value_frame.pack(side=tk.LEFT)

for j, valor in enumerate(self.pin_values[i]):


valor_label = tk.Label(value_frame, text=str(valor), width=10,
anchor="center", borderwidth=1, relief="solid")
valor_label.pack(side=tk.LEFT)

def Mostrar_Creacion_Compuesto(self, compuesto):


dialog = tk.Toplevel(self.window)
dialog.title("Creación del Compuesto")
dialog.geometry("300x200")
dialog['bg'] = '#e0b0ff'

compuesto_nombre = tk.Label(dialog, text=f"Compuesto:


{compuesto.find('nombre').text}", font=("Courier New", 12, "bold"))
compuesto_nombre.pack(pady=10)

elementos_compuesto = compuesto.find('elementos').findall('elemento')
elementos_text = "\n".join([f"- {elemento.text}" for elemento in
elementos_compuesto])
elementos_label = tk.Label(dialog, text=f"Elementos:\n{elementos_text}",
font=("Courier New", 10))
elementos_label.pack(pady=10)

maquina_nombre = tk.Label(dialog, text=f"Máquina:


{self.maquina.find('nombre').text}", font=("Courier New", 12, "bold"))
maquina_nombre.pack(pady=10)

pines_text = []
for i, elementos_pin in enumerate(self.pin_values):
pines_text.append(f"Pin {i+1}: {' '.join(elementos_pin)}")
pines_text = "\n".join(pines_text)
pines_label = tk.Label(dialog, text=f"Pines:\n{pines_text}", font=("Courier
New", 10))
pines_label.pack(pady=10)

dialog_button = tk.Button(dialog, text="Cerrar", command=dialog.destroy)


dialog_button.pack(pady=10)

También podría gustarte