Matplotlib & PysimpleGUI ile Çalışma Örneği

 

Matplotlib & PysimpleGUI ile Çalışma Örneği

Selamlar, bu yazımda Matplotlib kütüphanesini kullanarak örnek bar şemaları yapmayı deneyeceğiz. Tek kod ile 4 tanesin birden çalıştıracağız. Bunu yapmak içinde PysimpleGUI kütüphanesini kullarak bir tane GUI  oluşturacağız. Bunların hepsini tek bir Python script'i ile çözeceğiz tabi ki.

Butonların nasıl çalıştırıldığını gösterebilmek ve tıkladıkça ekranda güncelleme alabilmek için 2 tane örnek buton denemesi yapıyoruz. Bunu ilk yapmaya çalıştığımda çok zorlanmıştım o yüzden lazım olduğunda direkt buradan örneğini görebileceksiniz. Ekranda güncelleme yapan butonların yanında bir tane de programı kapatabilmek için buton bulunmaktadır.

Şimdi ilk başta kodumuza bakalım ve devamında butonlara tıklayarak nasıl güncelleme yaptığını örnek olarak görelim.

Python Script


#!/usr/bin/env python
import os
from matplotlib.ticker import NullFormatter
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import PySimpleGUI as sg
import matplotlib
matplotlib.use('TkAgg')
#kutuphaneleri bitirdik burada

def func(message):
print(message)

def draw_figure(canvas, figure, loc=(0, 0)):
figure_canvas_agg = FigureCanvasTkAgg(figure, canvas)
figure_canvas_agg.draw()
figure_canvas_agg.get_tk_widget().pack(side='top', fill='both', expand=1)
return figure_canvas_agg

def delete_figure_agg(figure_agg):
figure_agg.get_tk_widget().forget()

def get_file_size_in_bytes(file_path):
size = os.path.getsize(file_path)
return size

#verileri bosa aldik
var1,var2,var3,var4,var5,var6,var7,var8 = 0,0,0,0,0,0,0,0
grafSizePK = 0

fig1, ax = plt.subplots(figsize=(6, 4), dpi=75)

def ornek1(a,b,c):
values_to_plot = (a,b) #######################
ind = np.arange(len(values_to_plot))
width = 0.4
p1 = plt.bar(ind, values_to_plot, width, color=['blue','red'])
plt.ylabel('Değerler')
plt.title('Örnek 1')
plt.xticks(ind, (a,b))
if c == 1:
if a>b:
plt.yticks(np.arange(0, float("{:.3f}".format(a*2)),
                float("{:.3f}".format((a*2)/10))))
else:
plt.yticks(np.arange(0, float("{:.3f}".format(b*2)),
                float("{:.3f}".format((b*2)/10))))
else:
plt.yticks(np.arange(0, 100, 10))
plt.legend((p1[0],p1[1]), ('A','B'))

ornek1(var3,var4,0)

#////

fig2, ax = plt.subplots(figsize=(6, 4), dpi=75)

def ornek2(a,b,c,d):
values_to_plot2 = (a,b,c) #######################
ind = np.arange(len(values_to_plot2))
width = 0.4
p1 = plt.bar(ind, values_to_plot2, width, color=['blue','red','green'])
plt.ylabel('Değerler')
plt.title('Örnek 2')
plt.xticks(ind, (a,b,c))
if d == 1:
if a>b or a>c:
plt.yticks(np.arange(0, float("{:.3f}".format(a*2)),
                float("{:.3f}".format((a*2)/10))))
elif b>c or b>a:
plt.yticks(np.arange(0, float("{:.3f}".format(b*2)),
                float("{:.3f}".format((b*2)/10))))
else:
plt.yticks(np.arange(0, float("{:.3f}".format(c*2)),
                float("{:.3f}".format((c*2)/10))))
else:
plt.yticks(np.arange(0, 100, 10))
plt.legend((p1[0],p1[1],p1[2]), ('A','B','C'))

ornek2(var5,var6,var7,0)

#////

fig3, ax = plt.subplots(figsize=(6, 4), dpi=75)

def ornek3(a,b,c):
values_to_plot3 = (a, b) #######################
ind = np.arange(len(values_to_plot3))
width = 0.4
p1 = plt.bar(ind, values_to_plot3, width, color=['blue','red'])
plt.ylabel('Değerler')
plt.title('Örnek 3')
plt.xticks(ind, (a,b))
if c == 1:
if a>b:
plt.yticks(np.arange(0, float("{:.3f}".format(a*2)),
                float("{:.3f}".format((a*2)/10))))
else:
plt.yticks(np.arange(0, float("{:.3f}".format(b*2)),
                float("{:.3f}".format((b*2)/10))))
else:
plt.yticks(np.arange(0, 100, 10))
plt.legend((p1[0],p1[1]), ('A','B'))

ornek3(0,0,0)

#////

fig4, ax = plt.subplots(figsize=(6, 4), dpi=75)

def ornek4(a,b,c):
values_to_plot4 = (a,b) #######################
ind = np.arange(len(values_to_plot4))
width = 0.4
p1 = plt.bar(ind, values_to_plot4, width, color=['blue','red'])
plt.ylabel('Değerler')
plt.title('Örnek 4')
plt.xticks(ind, (a,b))
if c == 1:
if a>b:
plt.yticks(np.arange(0, float("{:.3f}".format(a*2)),
                float("{:.3f}".format((a*2)/10))))
else:
plt.yticks(np.arange(0, float("{:.3f}".format(b*2)),
                float("{:.3f}".format((b*2)/10))))
else:
plt.yticks(np.arange(0, 100, 10))
plt.legend((p1[0],p1[1]), ('TCP','UDP'))

ornek4(var7,var8,0)

# define the window layout
layout = [[sg.Text('Test Calismasi')],
[sg.Canvas(key='-CANVAS0-'),sg.Canvas(key='-CANVAS1-')],
[sg.Canvas(key='-CANVAS2-'),sg.Canvas(key='-CANVAS3-')],
[sg.Button('Try 1'),sg.Button('Try 2'), sg.Button('X')]]

# create the form and show it without the plot
window = sg.Window('DEMO Çalışma', layout, finalize=True,
    element_justification='center', font='Helvetica 18')

# add the plot to the window
figure1 = draw_figure(window['-CANVAS0-'].TKCanvas, fig1)
figure2 = draw_figure(window['-CANVAS1-'].TKCanvas, fig2)
figure3 = draw_figure(window['-CANVAS2-'].TKCanvas, fig3)
figure4 = draw_figure(window['-CANVAS3-'].TKCanvas, fig4)

event, values = window.read()
while True: # Event Loop
event, values = window.Read()
if event in (None, 'Kapat'):
break
if event == 'Try 1':
var1,var2,var3,var4,var5,var6,var7,var8 = 10,20,10,40,20,40,60,80
#f1
delete_figure_agg(figure2)
fig3, ax = plt.subplots(figsize=(6, 4), dpi=75)
ornek3(var1,var2,1)
figure2 = draw_figure(window['-CANVAS0-'].TKCanvas, fig1)
#f2
delete_figure_agg(figure1)
fig1, ax = plt.subplots(figsize=(6, 4), dpi=75)
ornek1(var3,var4,1)
figure1 = draw_figure(window['-CANVAS1-'].TKCanvas, fig2)
#f3
delete_figure_agg(figure3)
fig4, ax = plt.subplots(figsize=(6, 4), dpi=75)
ornek4(var7,var8,1)
figure3 = draw_figure(window['-CANVAS2-'].TKCanvas, fig3)
#f4
delete_figure_agg(figure4)
fig2, ax = plt.subplots(figsize=(6, 4), dpi=75)
ornek2(var5,var6,var7,grafSizePK)
figure4 = draw_figure(window['-CANVAS3-'].TKCanvas, fig4)
func('Pressed button TRY_1')

if event == 'Try 2':
var1,var2,var3,var4,var5,var6,var7,var8 = 100,200,150,60,60,120,80,20

#f1
delete_figure_agg(figure2)
fig3, ax = plt.subplots(figsize=(6, 4), dpi=75)
ornek3(var1,var2,1)
figure2 = draw_figure(window['-CANVAS0-'].TKCanvas, fig1)
#f2
delete_figure_agg(figure1)
fig1, ax = plt.subplots(figsize=(6, 4), dpi=75)
ornek1(var3,var4,1)
figure1 = draw_figure(window['-CANVAS1-'].TKCanvas, fig2)
#f3
delete_figure_agg(figure3)
fig4, ax = plt.subplots(figsize=(6, 4), dpi=75)
ornek4(var7,var8,1)
figure3 = draw_figure(window['-CANVAS2-'].TKCanvas, fig3)
#f4
delete_figure_agg(figure4)
fig2, ax = plt.subplots(figsize=(6, 4), dpi=75)
ornek2(var5,var6,var7,1)
figure4 = draw_figure(window['-CANVAS3-'].TKCanvas, fig4)
func('Pressed button TRY_2')

window.close()

Örnek Görseller





Yorumlar

Bu blogdaki popüler yayınlar

Python ile Turtle Kütüphanesiyle Çizim Denemesi 2

Girdimize en yakın palindrom değeri bulan program (Python3 ile)

Python ile Yazıyı Piramit Gibi Çizdirme