Skip to content

Instantly share code, notes, and snippets.

@AbraaoAlves
Created September 27, 2016 18:06
Show Gist options
  • Save AbraaoAlves/9e4e0e167e6f9183c55ad46c7a0bf337 to your computer and use it in GitHub Desktop.
Save AbraaoAlves/9e4e0e167e6f9183c55ad46c7a0bf337 to your computer and use it in GitHub Desktop.
tkinter com polignos conectados
# *-* coding: utf-8 *-*
import numpy as np
from tkinter import *
from math import *
class Vertice:
def __init__(self, rotulo):
self.rotulo = rotulo
print(self.rotulo)
def igualA(self, r):
return r == self.rotulo
class Grafo:
def __init__(self, numVertices):
self.matrizAdjacencias = np.zeros([numVertices, numVertices])
class Renderer(object):
def __init__(self, grafo):
self.grafo = grafo
self.offset = 0
self.radius = 200
self.sides = len(grafo.matrizAdjacencias)
self.cx, self.cy = 750/2, 480/2
step = 2*pi/self.sides
self.offset = radians(self.offset)
myfunc = lambda n: (self.radius*cos(step*n +self.offset)+self.cx, self.radius*sin(step*n +self.offset)+self.cy)
self.points = [myfunc(n) for n in range(int(self.sides)+1)]
def inside(self, canvas):
self.canvas = canvas
return self
def render(self):
r = 10
a=0
i = 0
for point in self.points:
self.canvas.create_oval(point[0]-r,point[1]-r,point[0]+r,point[1]+r,fill="black")
if(i>0):
self.canvas.create_line(
self.points[i][0], self.points[i][1], self.points[i-1][0], self.points[i-1][1], fill="black")
i+=1
if a < self.sides:
self.canvas.create_text(point[0]-r,point[1]-r, fill="black", text=a )
a+=1
class App_grafica:
def __init__ (self,pai):
self.Grafo = None
self.pai = pai
self.pai.geometry("800x550")
self.frame = Frame(pai)
self.frame.pack()
self.entrynomevertice = Entry(self.frame)
self.entrynomevertice.bind("<Return>", self.ArmazVerti)
self.entrynomevertice.pack(side=LEFT)
self.botaocriamatriz = Button(self.frame,text="Criar Grafo",command=self.drawPolygon).pack(side=LEFT)
self.canvasframe=Frame(pai)
self.canvasframe.pack( )
self.canvas = Canvas(self.canvasframe, width = 750, height = 480, bg = "white")
self.canvas.pack()
self.botoesbaixoframe = Frame(pai)
self.botoesbaixoframe.pack(side=BOTTOM)
self.botaocarregar = Button(self.botoesbaixoframe,text = "Limpar", command=self.limpar).pack(side=LEFT)
self.botaosalvar = Button(self.botoesbaixoframe,text = "SALVAR", command=self.salvaMatriz).pack(side=LEFT)
self.botaocarregar = Button(self.botoesbaixoframe,text = "CARREGAR",command=self.carregarMatriz).pack(side=LEFT)
def salvaMatriz(self, *arg):
np.savetxt("foo.csv",self.grafo.matrizAdjacencias,delimiter=",")
def carregarMatriz(self, *arg):
mt = np.genfromtxt('foo.csv', delimiter=',')
self.grafo = Grafo(len(mt))
self.grafo.matrizAdjacencias = mt;
self.drawPolygon()
def drawPolygon(self):
self.ArmazVerti()
Renderer(self.grafo).inside(self.canvas).render()
def ArmazVerti(self, *arg):
try:
valor = int(self.entrynomevertice.get())
self.grafo = Grafo(valor);
print(self.grafo.matrizAdjacencias)
print("Grafo criado com %d vertices\n" % valor)
# print(valor)
except Exception:
return
def imprimMatriz(self):
print (end=" ")
for i in range(3):
print (self.listaVertiices[i].rotulo, end=" ")
print(" ")
for i in range(3):
print (self.listaVertiices[i].rotulo, end=" ")
for j in range(3):
print (self.matrizAdjacencias[i][j], end= " ")
print(" ")
def limpar(self):
self.canvas.delete("all")
raiz = Tk( )
obj = App_grafica(raiz)
raiz.mainloop()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment