Advertisement
Infiniti_Inter

123

Jun 5th, 2022
1,143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 30.08 KB | None | 0 0
  1. import PySimpleGUI as sg
  2. import math
  3. import matplotlib
  4. import matplotlib.pyplot as plt
  5. import numpy as np
  6. import random
  7. from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk
  8.  
  9. #Количество знаков после запятой
  10. def toFixed(numObj, digits=2):
  11.     return f"{numObj:.{digits}f}"
  12. #Вспомогательная функция вывода рисунка в canvas
  13. def draw_figure_w_toolbar(canvas, fig, canvas_toolbar):
  14.     if canvas.children:
  15.         for child in canvas.winfo_children():
  16.             child.destroy()
  17.     if canvas_toolbar.children:
  18.         for child in canvas_toolbar.winfo_children():
  19.             child.destroy()
  20.     figure_canvas_agg = FigureCanvasTkAgg(fig, master=canvas)
  21.     figure_canvas_agg.draw()
  22.     toolbar = Toolbar(figure_canvas_agg, canvas_toolbar)
  23.     toolbar.update()
  24.     figure_canvas_agg.get_tk_widget().pack(side='right', fill='both', expand=1)
  25.  
  26.  
  27. class Toolbar(NavigationToolbar2Tk):
  28.     def __init__(self, *args, **kwargs):
  29.         super(Toolbar, self).__init__(*args, **kwargs)
  30.  
  31. def get_t_c():
  32.     return t_m + t_vis + t_p + t_r + t_t
  33.    
  34. def get_L_q():
  35.     return lambd**2*1./(mu*(mu-lambd))
  36.  
  37. def get_L():
  38.     return get_L_q() + lambd/mu
  39.  
  40. def get_w_q():
  41.     return get_L_q()/lambd
  42.  
  43. def get_w():
  44.     return get_w_q() + 1/mu
  45.  
  46. def get_C_p():
  47.     return C_w*get_L() + C_b * get_w() + C_r * get_w_q() + C_i * get_L_q()+ C_s
  48.  
  49. def calc():
  50.     ro = lambd/mu
  51.     L_q = get_L_q()
  52.     L = get_L()
  53.     w_q = get_w_q()
  54.     w = get_w()
  55.     cost = get_C_p()
  56.     return cost
  57.  
  58. def check(values):
  59.      if (values['-IN1-'] == '') or (values['-IN2-'] == '') or (values['-IN3-'] == '') or (values['-IN4-'] == '') or (values['-IN5-'] == '') or (values['-IN6-'] == '') or (values['-IN7-'] == '') or (values['-IN8-'] == '') or (values['-IN9-'] == '') or (values['-IN10-'] == '') or (values['-IN11-'] == ''):
  60.          return False
  61.      else:
  62.          return True
  63.  
  64. def layout0():
  65.     global cost
  66.     global fl
  67.     global mu
  68.     global lambd
  69.     global val
  70.  
  71.    
  72.     layout_l = [
  73.         [sg.Text('Введите диапазон:', size=(40, 1), key="-OUT-")],
  74.         [sg.Text('λ min'), sg.Slider((0.05, mu-0.1), orientation='h',  resolution = 0.01, enable_events=True, key='-SLIDER-')],
  75.         [sg.Text('λ max'), sg.Slider((0.25, mu-0.5), orientation='h',  resolution = 0.01, enable_events=True, key='-SLIDER3-')],
  76.        
  77.         [sg.T('Панель управления:')],
  78.         [sg.Canvas(key='controls_cv')],
  79.         [sg.T('График зависимости функции стоимости от интенсивности входящего потока λ:')],
  80.         [sg.Column(
  81.             layout=[
  82.                 [sg.Canvas(key='fig_cv',
  83.                            size=(350 * 2, 400)
  84.                            )]
  85.             ],
  86.             background_color='#DAE0E6',
  87.             pad=(0, 0)
  88.         )]]
  89.    
  90.    
  91.     layout_r = [
  92.        
  93.        
  94.         [sg.B('Регулировка функции стоимости')],
  95.         [sg.B('Зависимость стац. хар. от и λ', size = (25, 1), key = '2')],
  96.         [sg.B('Значение функции стоимости', size = (25, 1),  key = '1')],
  97.         [sg.B('Изменить входные данные', size = (25,1), key = 'input')],
  98.         [sg.T(50*'-')],
  99.  
  100.         [sg.B('Посторить график', size = (14, 1)), sg.B('Очистить', size=(9, 1))],
  101.         [sg.B('Показать сетку', size = (25, 1))],
  102.         [sg.B('Закрыть', size = (25, 1))],
  103.         [sg.T('')],
  104.  
  105.         [sg.Image(r'C:\Users\danul\Desktop\diploma\Robot2.png', size = (255, 295))],
  106.  
  107.        
  108.                 ]
  109.    
  110.     layout = [[sg.Col(layout_l), sg.Col(layout_r)]]
  111.  
  112.    
  113.     window = sg.Window('Система M/Gi/1. График функции стоимости от λ', layout)    
  114.    
  115.     while True:
  116.         event, values = window.read()        
  117.         if event == sg.WIN_CLOSED or event == 'Закрыть':
  118.             fl = False
  119.             break
  120.         if (event == 'Показать сетку'):
  121.             plt.grid()
  122.             fig = plt.gcf()
  123.             draw_figure_w_toolbar(window['fig_cv'].TKCanvas, fig, window['controls_cv'].TKCanvas)
  124.        
  125.         if (event == '0'):
  126.             val = 0
  127.             break        
  128.         if (event == '1'):
  129.             val = 1
  130.             break
  131.         if (event == '2'):
  132.             val = 2
  133.             break
  134.         if (event == 'input'):
  135.             val = 4
  136.             break
  137.        
  138.         if (event == 'Регулировка функции стоимости'):            
  139.             layout3()
  140.  
  141.            
  142.        
  143.         if event in (sg.WIN_CLOSED, 'Закрыть'):  # always,  always give a way out!
  144.             fl = True
  145.             break
  146.        
  147.         l = values['-SLIDER-']
  148.         h = 0.01
  149.         r = values['-SLIDER3-']
  150.         if event == 'Очистить':
  151.             plt.gcf().clear()
  152.             fig = plt.gcf()
  153.             plt.title('Зависимость функции стоимости от интенсивности входящего потока')
  154.             plt.xlabel('λ')
  155.             plt.ylabel('Функция стоимости')        
  156.             draw_figure_w_toolbar(window['fig_cv'].TKCanvas, fig, window['controls_cv'].TKCanvas)
  157.            
  158.         if event == 'Посторить график':
  159.            
  160.             if (r - l < 0.2):
  161.                 if (r < l):
  162.                     window["-OUT-"].update('λ min не может быть больше λ max')
  163.                 else:
  164.                     window["-OUT-"].update('Cлишком маленький интервал')
  165.             else:
  166.                 window["-OUT-"].update('Введите диапазон:')            
  167.                
  168.                 plt.figure(1)
  169.                 fig = plt.gcf()
  170.                 DPI = fig.get_dpi()
  171.                 fig.set_size_inches(350 * 2 / float(DPI), 400 / float(DPI))
  172.                 # -------------------------------
  173.                 x = []
  174.                 y = []
  175.                 lambd = l
  176.                 print(h)
  177.                 while(lambd < r):
  178.                     lambd = lambd + h
  179.                     C_p = calc()
  180.                     y.append(C_p)
  181.                     x.append(lambd)                
  182.              
  183.                 plt.plot(x, y)
  184.                 plt.title('Зависимость функции стоимости от интенсивности входящего потока')
  185.                 plt.xlabel('λ')
  186.                 plt.ylabel('Функция стоимости')
  187.                
  188.  
  189.        
  190.                 # ------------------------------- Instead of plt.show()
  191.                 draw_figure_w_toolbar(window['fig_cv'].TKCanvas, fig, window['controls_cv'].TKCanvas)
  192.            
  193.    
  194.     window.close()
  195.  
  196. def layout1():
  197.     global cost
  198.     global fl
  199.     global mu
  200.     global lambd
  201.     global s
  202.     global val
  203.     layout = [
  204.             [sg.Text(f'Значение функции стоимости : -',size=(40, 1), key="-OUT-")],
  205.             [sg.Text('Введите интенсивность входящего потока'), sg.InputText(size = (10, 1))],
  206.             [sg.T("                "), sg.B('График функции стоимости', key = '0', size = (24, 1))],
  207.             [sg.T("                "),sg.Button('Зависимость стац. хар. от и λ', key = '2', size = (24, 1))],
  208.             [sg.T("                "),sg.B('Изменить входные данные', size = (24,1), key = 'input')],
  209.             [sg.T("                "),sg.Button('Применить', size = (11, 1), key = 'Ok'), sg.Button('Закрыть', size = (11, 1)), ]
  210.             ]
  211.        
  212.  
  213.        
  214.     window = sg.Window('Система M/Gi/1. Значение функции стоимости', layout)
  215.     while True:
  216.         event, values = window.read()
  217.         if event == sg.WIN_CLOSED or event == 'Закрыть':
  218.             fl = False
  219.             break
  220.         if (event == '0'):
  221.             val = 0
  222.             break        
  223.         if (event == '2'):
  224.             val = 2
  225.             break
  226.         if (event == 'input'):
  227.             val = 4
  228.             break
  229.  
  230.         if event == 'Ok':
  231.             if (len(values[0]) > 0 and float(values[0]) < mu - 0.1):
  232.                 lambd = float(values[0])
  233.                 cost = calc()
  234.                 cost = toFixed(cost, 2)
  235.                 window["-OUT-"].update(f'Значение функции стоимости : {cost}')
  236.             else:
  237.                 window["-OUT-"].update('Интенсивность входящего потока слишком велика')
  238.            
  239.     window.close()
  240.  
  241. def layout2():
  242.     global cost
  243.     global fl
  244.     global mu
  245.     global lambd
  246.     global s
  247.     global val
  248.    
  249.    
  250.     layout = [[sg.Text('Зависимость стационарных характеристик от интенсивности входящего потока λ', justification='center', size=(65, 1), relief=sg.RELIEF_SUNKEN)],
  251.                   [sg.T("                                     "), sg.Text(f'Коэффициент использования: -', size=(40, 1), key="-OUT-")],
  252.                   [sg.T("                                     "), sg.Text(f'М.о. числа требований в очереди: -', size=(40, 1), key="-OUT1-")],
  253.                   [sg.T("                                     "), sg.Text(f'М.о. числа требований в системе: -', size=(40, 1), key="-OUT2-")],
  254.                   [sg.T("                                     "), sg.Text(f'М.о. времени пребывания в очереди: -', size=(40, 1), key="-OUT3-")],
  255.                   [sg.T("                                     "), sg.Text(f'М.о. времени пребывания в системе: -', size=(40, 1), key="-OUT4-")],
  256.                   [sg.T("                                     "), sg.Text('λ'), sg.Slider((0.05, mu-0.2), orientation='h',  resolution = 0.01, enable_events=True, key='-SLIDER-')],
  257.                   [sg.T("                                     "), sg.B('График функции стоимости', key = '0', size = (25, 1))],
  258.                   [sg.T("                                     "), sg.Button('Значение функции стоимости', key = '1', size = (25, 1))],            
  259.                   [sg.T("                                     "), sg.B('Изменить входные данные', size = (25,1), key = 'input')],  
  260.                   [sg.T("                                     "), sg.Button('Закрыть', size = (25, 1))]
  261.                    ]
  262.                  
  263.        
  264.     window = sg.Window('Система M/Gi/1. Зависимость стационарных характеристик от λ', layout)
  265.        
  266.     while True:
  267.        
  268.         _lambd = lambd
  269.         event, values = window.read()
  270.         if event == sg.WIN_CLOSED or event == 'Закрыть':
  271.             fl = False
  272.             break
  273.         if (event == '0'):
  274.             val = 0
  275.             break        
  276.         if (event == '1'):
  277.             val = 1
  278.             break
  279.         if (event == '2'):
  280.             val = 2
  281.             break
  282.         if (event == 'input'):
  283.             val = 4
  284.             break
  285.         lambd = values['-SLIDER-']
  286.        
  287.         rho = toFixed(lambd/mu)
  288.         L_q = toFixed(get_L_q())
  289.         L = toFixed(get_L())
  290.         w = toFixed(get_w())
  291.         w_q = toFixed(get_w_q())
  292.        
  293.         window["-OUT-"].update(f'Коэффициент использования:{rho}')
  294.         window["-OUT1-"].update(f'М.о. числа требований в очереди:{L_q}')
  295.         window["-OUT2-"].update(f'М.о. числа требований в системе:{L}')
  296.         window["-OUT3-"].update(f'М.о. времени пребывания в очереди:{w_q}')
  297.         window["-OUT4-"].update(f'М.о. времени пребывания в системе:{w}')
  298.         lambd = _lambd
  299.        
  300.     window.close()
  301.  
  302. def layout3():
  303.     global cost
  304.     global fl
  305.     global mu
  306.     global lambd
  307.     global val
  308.     global C_s
  309.     global C_w
  310.     global C_b
  311.     global C_r
  312.     global C_i
  313.  
  314.    
  315.    
  316.    
  317.     layout = [
  318.          [sg.Text('Введите данные:', key="-OUT-"),  sg.B('Показать/скрыть базовые значения:', key = '-SH-'), sg.Checkbox('Зафиксировать',default = False, key ="-IN-")],
  319.          [sg.Text('C_s '), sg.Slider((0.0, 1.0), orientation='h',  resolution = 0.01, enable_events=True, key='-SLIDER1-'), sg.Text('', key="-Base1-")],
  320.          [sg.Text('C_w'), sg.Slider((0.0, 100), orientation='h',  resolution = 1, enable_events=True, key='-SLIDER2-'), sg.Text('', key="-Base2-")],
  321.          [sg.Text('C_b'), sg.Slider((0.0, 1.0), orientation='h',  resolution = 0.01, enable_events=True, key='-SLIDER3-'), sg.Text('', key="-Base3-")],
  322.          [sg.Text('C_r '), sg.Slider((0.0, 100), orientation='h',  resolution = 1, enable_events=True, key='-SLIDER4-'), sg.Text('', key="-Base4-")],
  323.          [sg.Text('C_i '), sg.Slider((0.0, 100), orientation='h',  resolution = 1, enable_events=True, key='-SLIDER5-'), sg.Text('', key="-Base5-")],
  324.        
  325.         [sg.B('Посторить график', size = (14, 1)), sg.B('Очистить', size=(9, 1))],
  326.         [sg.B('Показать сетку', size = (14, 1)),sg.B('Вернуться', size = (9, 1))],
  327.         [sg.T('Панель управления:')],
  328.         [sg.Canvas(key='controls_cv2')],
  329.         [sg.T('График зависимости функции стоимости от интенсивности входящего потока λ:')],
  330.         [sg.Column(
  331.             layout=[
  332.                 [sg.Canvas(key='fig_cv2',
  333.                            # it's important that you set this size
  334.                            size=(400 * 2, 400)
  335.                            )]
  336.             ],
  337.             background_color='#DAE0E6',
  338.             pad=(0, 0)
  339.         )],
  340.         ]  
  341.    
  342.     window = sg.Window('Система M/Gi/1. Регулировка отдельных элементов функции стоимости', layout)    
  343.     flag_sh = True
  344.    
  345.     while True:
  346.         event, values = window.read()            
  347.        
  348.        
  349.         if (event == 'Показать сетку'):
  350.             plt.grid()
  351.             fig = plt.gcf()
  352.             draw_figure_w_toolbar(window['fig_cv2'].TKCanvas, fig, window['controls_cv2'].TKCanvas)
  353.         if event == 'Очистить':
  354.             plt.gcf().clear()
  355.             fig = plt.gcf()
  356.             plt.title('Зависимость функции стоимости от интенсивности входящего потока')
  357.             plt.xlabel('λ')
  358.             plt.ylabel('Функция стоимости')
  359.             draw_figure_w_toolbar(window['fig_cv2'].TKCanvas, fig, window['controls_cv2'].TKCanvas)
  360.        
  361.        
  362.         if (event == 'Вернуться'):
  363.             if (values["-IN-"] == False):
  364.                 C_w = 50
  365.                 C_b = 0.1
  366.                 C_r = 60
  367.                 C_i = 10
  368.                 C_s = 0.5
  369.             break        
  370.  
  371.        
  372.         if (event == '-SH-'):
  373.             if (flag_sh == False):
  374.                 flag_sh = True
  375.                 window['-Base1-'].Update('')
  376.                 window['-Base2-'].Update('')
  377.                 window['-Base3-'].Update('')
  378.                 window['-Base4-'].Update('')
  379.                 window['-Base5-'].Update('')
  380.             else:
  381.                 flag_sh = False
  382.                 window['-Base1-'].Update('= 0.5    стоимость сервера(робота)')
  383.                 window['-Base2-'].Update('= 50     стоимость нахождения деталей в очереди')
  384.                 window['-Base3-'].Update('= 0.1    стоимость IDLE робота')
  385.                 window['-Base4-'].Update('= 60     cтоимость простоя робота')
  386.                 window['-Base5-'].Update('= 10     cтоимость возврата детали для подбора')
  387.                
  388.                
  389.        
  390.         if event == sg.WIN_CLOSED or event == 'Закрыть':
  391.             fl = False
  392.             break
  393.  
  394.  
  395.        
  396.        
  397.        
  398.         if (flag_sh):
  399.             C_s =  values['-SLIDER1-']
  400.             C_w =  values['-SLIDER2-']
  401.             C_b =  values['-SLIDER3-']
  402.             C_r =  values['-SLIDER4-']
  403.             C_i =  values['-SLIDER5-']
  404.         else:
  405.             C_w = 50
  406.             C_b = 0.1
  407.             C_r = 60
  408.             C_i = 10
  409.             C_s = 0.5
  410.            
  411.            
  412.        
  413.         if event == 'Посторить график':
  414.             l = 0.1
  415.             h = 0.01
  416.             r = mu - 0.5
  417.             lambd = l
  418.            
  419.             # ------------------------------- PASTE YOUR MATPLOTLIB CODE HERE
  420.             plt.figure(2)
  421.             fig = plt.gcf()
  422.  
  423.            
  424.             x = []
  425.             y = []
  426.             while(lambd < r):
  427.                 lambd = lambd + h
  428.                 C_p = calc()
  429.                 y.append(C_p)
  430.                 x.append(lambd)
  431.                
  432.                
  433.             plt.plot(x, y)
  434.             plt.title('Зависимость функции стоимости от интенсивности входящего потока')
  435.             plt.xlabel('λ')
  436.             plt.ylabel('Функция стоимости')
  437.             #print(y)
  438.  
  439.    
  440.     # ------------------------------- Instead of plt.show()
  441.             draw_figure_w_toolbar(window['fig_cv2'].TKCanvas, fig, window['controls_cv2'].TKCanvas)
  442.  
  443.            
  444.      
  445.        
  446.     window.close()
  447.    
  448. def layout4():
  449.     global fl
  450.     global mu
  451.     global lambd
  452.     global val
  453.     global t_m
  454.     global t_vis
  455.     global t_p
  456.     global t_r
  457.     global t_t
  458.     global d
  459.     global a
  460.     global w
  461.     global v
  462.    
  463.    
  464.    
  465.     layout_r = [
  466.         [sg.B('Показать и применить базовые значения', key = '-S-')],
  467.         [sg.B('Скрыть и отменить базовые значения', size =(31, 1), key = '-H-')],
  468.         [sg.B('Вычисление пропускной способности', size = (31, 1))],
  469.         [sg.B('Применить'), sg.B('Продолжить', size = (9, 1)), sg.B('Закрыть', size = (9, 1))],
  470.        
  471.         [sg.Image(r'C:\Users\danul\Desktop\diploma\Robot.png', size = (255, 195))]
  472.         ]
  473.    
  474.    
  475.     layout_l = [
  476.             [sg.Text('Входные данные:',size=(15, 1)), sg.Text('', size = (25, 2), key = '-Error-')],
  477.             [sg.Text('λ =     '), sg.InputText(key = '-IN1-', size = (5, 1)), sg.T('', key = '-Base1-')],
  478.             [sg.Text('μ =     '), sg.InputText(key = '-IN2-', size = (5, 1)), sg.T('', key = '-Base2-')],
  479.             [sg.Text('t_m = '), sg.InputText(key = '-IN3-', size = (5, 1)), sg.T('', key = '-Base3-')],
  480.             [sg.Text('t_vis ='), sg.InputText(key = '-IN4-', size = (5, 1)), sg.T('', key = '-Base4-') ],
  481.             [sg.Text('t_p =  '), sg.InputText(key = '-IN5-', size = (5, 1)), sg.T('', key = '-Base5-')],
  482.             [sg.Text('t_r =   '), sg.InputText(key = '-IN6-', size = (5, 1)), sg.T('', key = '-Base6-')],
  483.             [sg.Text('t_t =   '), sg.InputText(key = '-IN7-', size = (5, 1)), sg.T('', key = '-Base7-')],
  484.             [sg.Text('d =     '), sg.InputText(key = '-IN8-', size = (5, 1)), sg.T('', key = '-Base8-')],
  485.             [sg.Text('a =     '), sg.InputText(key = '-IN9-', size = (5, 1)), sg.T('', key = '-Base9-')],
  486.             [sg.Text('W =   '), sg.InputText(key = '-IN10-', size = (5, 1)), sg.T('', key = '-Base10-')],
  487.             [sg.Text('v =     '), sg.InputText(key = '-IN11-', size = (5, 1)), sg.T('', key = '-Base11-')],
  488.              
  489.            
  490.             ]
  491.    
  492.    
  493.    
  494.    
  495.     layout = [[sg.Col(layout_l), sg.Col(layout_r)]]
  496.     window = sg.Window('Система M/Gi/1. Входные данные', layout, finalize=True, keep_on_top=True)
  497.     valuesSet = False
  498.     while True:
  499.         event, values = window.read()
  500.         if event == sg.WIN_CLOSED or event == 'Закрыть':
  501.             fl = False
  502.             break
  503.        
  504.         if (event == 'Продолжить'):
  505.             if (valuesSet == True):
  506.                 val = 0
  507.                 break
  508.             else:
  509.                 window["-Error-"].update('Ошибка: нажмите "Применить".')
  510.                
  511.         if (event == 'Вычисление пропускной способности'):
  512.             if (valuesSet == True):
  513.                 val = 5
  514.                 break
  515.             else:
  516.                 window["-Error-"].update('Ошибка: нажмите "Применить".')
  517.                
  518.        
  519.         if (event == '-S-'):
  520.             valuesSet = True
  521.             lambd = 0.5
  522.             mu = 4
  523.             t_m = 0.13
  524.             t_vis = 0.1
  525.             t_p = 0.12
  526.             t_r = 0.125
  527.             t_t = 0.153
  528.             w = 250
  529.             d = 14.4
  530.             a = d/2
  531.             v = 256
  532.             window['-Base1-'].Update('= 0.5')
  533.             window['-Base2-'].Update('= 4')
  534.             window['-Base3-'].Update('= 0.13')
  535.             window['-Base4-'].Update('= 0.1')
  536.             window['-Base5-'].Update('= 0.12')
  537.             window['-Base6-'].Update('= 0.125')
  538.             window['-Base7-'].Update('= 0.153')
  539.             window['-Base8-'].Update('= 14.4')
  540.             window['-Base9-'].Update('= 7.2')
  541.             window['-Base10-'].Update('= 250')
  542.             window['-Base11-'].Update('= 256')
  543.         if (event == '-H-'):
  544.             valuesSet = False
  545.             lambd = 0
  546.             mu = 0
  547.             t_m = 0
  548.             t_vis = 0
  549.             t_p = 0
  550.             t_r = 0
  551.             t_t = 0
  552.             w = 0
  553.             d = 0
  554.             a = 0
  555.             v = 0
  556.             window['-Base1-'].Update('')
  557.             window['-Base2-'].Update('')
  558.             window['-Base3-'].Update('')
  559.             window['-Base4-'].Update('')
  560.             window['-Base5-'].Update('')
  561.             window['-Base6-'].Update('')
  562.             window['-Base7-'].Update('')
  563.             window['-Base8-'].Update('')
  564.             window['-Base9-'].Update('')
  565.             window['-Base10-'].Update('')
  566.             window['-Base11-'].Update('')
  567.            
  568.        
  569.  
  570.            
  571.         if event == 'Применить':
  572.             valuesSet = False
  573.             if (check(values) == False):
  574.                 window["-Error-"].update('Ошибка: Заполните все поля')
  575.                 continue            
  576.             if (float(values['-IN1-']) > float(values['-IN2-']) - 0.1):
  577.                 print(float(values['-IN1-']))
  578.             elif (float(values['-IN2-']) <= 0.05):                
  579.                 window["-Error-"].update('Ошибка: значение μ должно быть больше 0.05')
  580.             elif (d == 0 or a == 0 or w == 0 or v == 0):
  581.                 window["-Error-"].update('Ошибка: значения d, a, W, v должны быть больше 0')
  582.             else:
  583.                 lambd = float(values['-IN1-'])
  584.                 mu = float(values['-IN2-'])
  585.                 t_m = float(values['-IN3-'])
  586.                 t_vis = float(values['-IN4-'])
  587.                 t_p = float(values['-IN5-'])
  588.                 t_r = float(values['-IN6-'])
  589.                 t_t = float(values['-IN7-'])
  590.                 d = float(values['-IN8-'])
  591.                 a = float(values['-IN9-'])
  592.                 w = float(values['-IN10-'])
  593.                 v = float(values['-IN11-'])
  594.                 valuesSet = True
  595.                 window["-Error-"].update('Введеные данные корректны ')
  596.                
  597.                
  598.            
  599.            
  600.     window.close()
  601.  
  602. def layout5():
  603.     global fl    
  604.     global val
  605.    
  606.     layout_l = [        
  607.         [sg.T('Панель управления:')],
  608.         [sg.Canvas(key='controls_cv3')],
  609.         [sg.T('График зависимости пропускной способности от скорости ленты:')],
  610.         [sg.Column(
  611.             layout=[
  612.                 [sg.Canvas(key='fig_cv3',
  613.                            size=(350 * 2, 400)
  614.                            )]
  615.             ],
  616.             background_color='#DAE0E6',
  617.             pad=(0, 0)
  618.         )]]
  619.    
  620.    
  621.     layout_r = [
  622.        
  623.         [sg.B('Входные данные', size = (25,1), key = 'input')],
  624.         [sg.Text('d = '), sg.Slider((0.0, 15.0), orientation='h',  resolution = 0.1, enable_events=True, key='-SLIDER1-')],
  625.         [sg.Text('a = '), sg.Slider((0.0, 10.0), orientation='h',  resolution = 0.1, enable_events=True, key='-SLIDER2-')],
  626.         [sg.T(50*'-')],
  627.         [sg.B('Посторить график', size = (14, 1)), sg.B('Очистить', size=(9, 1))],
  628.         [sg.B('Показать сетку', size = (25, 1))],
  629.         [sg.B('Закрыть', size = (25, 1))],
  630.  
  631.                 ]
  632.    
  633.     layout = [[sg.Col(layout_l), sg.Col(layout_r)]]
  634.  
  635.    
  636.     window = sg.Window('Система M/Gi/1. График пропускной способности', layout)    
  637.    
  638.     while True:
  639.         event, values = window.read()        
  640.         if event == sg.WIN_CLOSED or event == 'Закрыть':
  641.             fl = False
  642.             break
  643.         if (event == 'Показать сетку'):
  644.             plt.grid()
  645.             fig = plt.gcf()
  646.             draw_figure_w_toolbar(window['fig_cv3'].TKCanvas, fig, window['controls_cv3'].TKCanvas)
  647.         if (event == 'input'):
  648.             val = 4
  649.             break
  650.        
  651.  
  652.            
  653.        
  654.        
  655.         d = values['-SLIDER1-']/10
  656.         a = values['-SLIDER2-']/10
  657.         v = 1
  658.         if event == 'Очистить':
  659.             plt.gcf().clear()
  660.             fig = plt.gcf()
  661.             plt.title('Зависимость функции стоимости от интенсивности входящего потока')
  662.             plt.xlabel('λ')
  663.             plt.ylabel('Функция стоимости')        
  664.             draw_figure_w_toolbar(window['fig_cv3'].TKCanvas, fig, window['controls_cv3'].TKCanvas)
  665.            
  666.         if event == 'Посторить график':
  667.             plt.figure(1)
  668.             fig = plt.gcf()
  669.             DPI = fig.get_dpi()
  670.             fig.set_size_inches(350 * 2 / float(DPI), 400 / float(DPI))
  671.             V = []
  672.             T = []
  673.             t_c = get_t_c()
  674.             print(50*'--')
  675.             print(t_c)
  676.             for i in range(1, 500):
  677.                 v = i * 160
  678.                 if (w-d == 0):
  679.                     p_b = 1e9
  680.                 else:
  681.                     p_b = (w - d - 2 * a)/(w - d)**2
  682.                 if ((w*pi*(a+d)**2) == 0):
  683.                     r_b = 1e9
  684.                 else:
  685.                     r_b = (w-d)/(w*pi*(a+d)**2)
  686.                 r_b2 = r_b//1
  687.                 if (((w/v)+t_p+r_b2*t_c) == 0):
  688.                     T_r = 1e9
  689.                 else:
  690.                     T_r = r_b/((w/v)+t_p+r_b2*t_c)
  691.                 if (i % 100 == 0):
  692.                     print(r_b)
  693.                     print(r_b2)
  694.                    
  695.                 V.append(i)    
  696.                 T.append(T_r)              
  697.            
  698.             plt.plot(V, T)
  699.             plt.title('График зависимости пропускной способности от скорости ленты')
  700.             plt.xlabel('Скорость ленты V об/мин')
  701.             plt.ylabel('Пропускная способность T_r')
  702.             # ------------------------------- Instead of plt.show()
  703.             draw_figure_w_toolbar(window['fig_cv3'].TKCanvas, fig, window['controls_cv3'].TKCanvas)
  704.            
  705.    
  706.     window.close()
  707.    
  708. def makeTheme():
  709.     sg.theme('DarkTeal9')
  710.      
  711.     layout = [
  712.               [sg.Text('Выберете тему, чтобы увидить демо окно')],
  713.               [sg.Listbox(values = sg.theme_list(),
  714.                           size =(20, 12),
  715.                           key ='-LIST-',
  716.                           enable_events = True)],
  717.               [sg.Button('Применить')]]
  718.      
  719.     window = sg.Window('Список тем', layout)
  720.  
  721.     while True:  
  722.         event, values = window.read()
  723.          
  724.         if event in (None, 'Применить'):
  725.             window.close()
  726.             return values['-LIST-'][0]
  727.              
  728.         sg.theme(values['-LIST-'][0])
  729.         sg.popup_get_text('Это "{}" тема'.format(values['-LIST-'][0]))
  730.          
  731.  
  732. ###############
  733. #инициализиция#
  734. ###############
  735. lambd = 0.5
  736. mu = 4
  737. C_w = 50
  738. C_b = 0.1
  739. C_r = 60
  740. C_i = 10
  741. C_s = 0.5
  742. t_m = 0.13
  743. t_vis = 0.1
  744. t_p = 0.12
  745. t_r = 0.125
  746. t_t = 0.15
  747. t_c = get_t_c()
  748. cost = 1
  749. s = 1
  750. fl = True
  751. val = 0
  752. pi = math.acos(-1)
  753. n = 340
  754. w = 250
  755. d = 14.4
  756. a = d/2
  757. v = 256
  758. ###############
  759.  
  760.  
  761. sg.theme(makeTheme())
  762. while (fl == True):
  763. ############################## 0 ##############################  
  764.     if (val == 0):        
  765.         layout0()
  766. ###############################################################                    
  767.                        
  768. ############################## 1 ##############################        
  769.     if (val == 1):
  770.         layout1()
  771. ###############################################################
  772.        
  773. ############################## 2 ##############################  
  774.     if (val == 2):
  775.         layout2()
  776. ###############################################################
  777.  
  778. ############################## 3 ##############################  
  779.     if (val == 3):
  780.         layout3()
  781. ###############################################################
  782.  
  783. ############################## 4 ##############################  
  784.     if (val == 4):
  785.         layout4()
  786. ###############################################################
  787.  
  788. ############################## 5 ##############################  
  789.     if (val == 5):
  790.         layout5()
  791. ###############################################################
  792.    
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement