Está en la página 1de 3

import time

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.")
TablaPines(elemento)
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):
for j in range(len(self.pin_values[i])):
cell = tk.Label(self.table_frame, text=self.pin_values[i][j],
bg="white", width=8, height=3, font=("Courier New", 10))
cell.grid(row=j, column=i, padx=2, pady=2)
if j == 0:
cell.config(bg="gray")

compuestos = self.maquina.findall('../listaCompuestos/compuesto')
for compuesto in compuestos:
nombre_compuesto = compuesto.find('nombre').text
elementos_compuesto = compuesto.find('elementos')
elementos = [e.text for e in elementos_compuesto.findall('elemento')]

if set(elementos).issubset(set(sum(self.pin_values, []))):
boton = tk.Button(self.window, text=nombre_compuesto,
command=lambda elementos=elementos: self.mostrar_elementos(elementos))
boton.pack(pady=5)

def mostrar_elementos(self, elementos):


pin_colors = ["red", "green", "blue", "yellow", "purple", "orange"]
for i in range(self.num_pins):
for j in range(len(self.pin_values[i])):
if self.pin_values[i][j] in elementos:
cell = self.table_frame.grid_slaves(row=j, column=i)[0]
cell.config(bg=pin_colors[i])
self.window.update()
time.sleep(1)

También podría gustarte