Guest User

Untitled

a guest
Nov 15th, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.56 KB | None | 0 0
  1. import matplotlib
  2. from math import *
  3. import pylab
  4. from matplotlib import mlab
  5. from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
  6. from matplotlib.figure import Figure
  7. import tkinter as tk
  8. from tkinter import ttk
  9. from tkinter import *
  10.  
  11. g = 9.81
  12.  
  13.  
  14. class Fly(tk.Tk):
  15.  
  16. def __init__(self, *args, **kwargs):
  17. tk.Tk.__init__(self, *args, **kwargs)
  18.  
  19. tk.Tk.wm_title(self, "Fly")
  20.  
  21. container = tk.Frame(self)
  22. container.pack(side="top", fill="both", expand=True)
  23. container.grid_rowconfigure(0, weight=1)
  24. container.grid_columnconfigure(0, weight=1)
  25.  
  26. self.frames = {}
  27.  
  28. for F in (StartPage, PageOne):
  29. frame = F(container, self)
  30.  
  31. self.frames[F] = frame
  32.  
  33. frame.grid(row=0, column=0, sticky="nsew")
  34.  
  35. self.show_frame(StartPage)
  36.  
  37. def show_frame(self, cont):
  38. frame = self.frames[cont]
  39. frame.tkraise()
  40.  
  41.  
  42. class StartPage(tk.Frame):
  43.  
  44. def __init__(self, parent, controller):
  45. tk.Frame.__init__(self, parent)
  46. label = tk.Label(self, text="Начальная страница")
  47. label.pack(pady=10, padx=10)
  48.  
  49. button = ttk.Button(self, text="Visit Page 1",
  50. command=lambda: controller.show_frame(PageOne))
  51. button.pack()
  52.  
  53. v = IntVar()
  54. angle = IntVar()
  55. x0 = IntVar()
  56. y0 = IntVar()
  57. v2 = IntVar()
  58. angle2 = IntVar()
  59. x02 = IntVar()
  60. y02 = IntVar()
  61. v3 = IntVar()
  62. angle3 = IntVar()
  63. x03 = IntVar()
  64. y03 = IntVar()
  65.  
  66. frame2 = Frame(self, borderwidth=4, relief=GROOVE)
  67. frame2.pack()
  68.  
  69. first = Label(self, text='Данные для первого графика')
  70. first.pack()
  71.  
  72. second = Label(self, text='Начальная скорость')
  73. second.pack()
  74. entry = Entry(self, width=10, textvariable=v)
  75. entry.pack()
  76.  
  77. third = Label(self, text='Угол выстрела')
  78. third.pack()
  79. entry = Entry(self, width=10, textvariable=angle)
  80. entry.pack()
  81.  
  82. fourth = Label(self, text='Начальная координата x')
  83. fourth.pack()
  84. entry = Entry(self, width=10, textvariable=x0)
  85. entry.pack()
  86.  
  87. fifth = Label(self, text='Начальная координата y')
  88. fifth.pack()
  89. entry = Entry(self, width=10, textvariable=y0)
  90. entry.pack()
  91.  
  92. frame3 = Frame(self, borderwidth=4, relief=GROOVE)
  93. frame3.pack()
  94.  
  95. first = Label(self, text='Данные для второго графика')
  96. first.pack()
  97.  
  98. second = Label(self, text='Начальная скорость')
  99. second.pack()
  100. entry = Entry(self, width=10, textvariable=v2)
  101. entry.pack()
  102.  
  103. third = Label(self, text='Угол выстрела')
  104. third.pack()
  105. entry = Entry(self, width=10, textvariable=angle2)
  106. entry.pack()
  107.  
  108. fourth = Label(self, text='Начальная координата x')
  109. fourth.pack()
  110. entry = Entry(self, width=10, textvariable=x02)
  111. entry.pack()
  112.  
  113. fifth = Label(self, text='Начальная координата y')
  114. fifth.pack()
  115. entry = Entry(self, width=10, textvariable=y02)
  116. entry.pack()
  117.  
  118. first = Label(self, text='Данные для третьего графика')
  119. first.pack()
  120.  
  121. second = Label(self, text='Начальная скорость')
  122. second.pack()
  123. entry = Entry(self, width=10, textvariable=v3)
  124. entry.pack()
  125.  
  126. third = Label(self, text='Угол выстрела')
  127. third.pack()
  128. entry = Entry(self, width=10, textvariable=angle3)
  129. entry.pack()
  130.  
  131. fourth = Label(self, text='Начальная координата x')
  132. fourth.pack()
  133. entry = Entry(self, width=10, textvariable=x03)
  134. entry.pack()
  135.  
  136. fifth = Label(self, text='Начальная координата y')
  137. fifth.pack()
  138. entry = Entry(self, width=10, textvariable=y03)
  139. entry.pack()
  140.  
  141. nonlocal v
  142. nonlocal angle
  143. nonlocal x0
  144. nonlocal y0
  145. nonlocal v2
  146. nonlocal angle2
  147. nonlocal x02
  148. nonlocal y02
  149. nonlocal v3
  150. nonlocal angle3
  151. nonlocal x03
  152. nonlocal y03
  153.  
  154.  
  155.  
  156.  
  157.  
  158. class PageOne(tk.Frame):
  159.  
  160. def __init__(self, parent, controller):
  161. tk.Frame.__init__(self, parent)
  162. label = tk.Label(self, text="Generate")
  163. label.pack(pady=10, padx=10)
  164.  
  165. button1 = ttk.Button(self, text="Поменять значения",
  166. command=lambda: controller.show_frame(StartPage))
  167. button1.pack()
  168.  
  169. f = Figure(figsize=(5, 5), dpi=100)
  170. a = f.add_subplot(111)
  171.  
  172. canvas = FigureCanvasTkAgg(f, self)
  173. canvas.show()
  174. canvas.get_tk_widget().pack(side=tk.BOTTOM, fill=tk.BOTH, expand=True)
  175.  
  176. toolbar = NavigationToolbar2TkAgg(canvas, self)
  177. toolbar.update()
  178. canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
  179.  
  180. t = ((2 * v * sin(angle)) / g)
  181. vx = v * cos(angle)
  182.  
  183. t2 = ((2 * v2 * sin(angle2)) / g)
  184. vx2 = v2 * cos(angle2)
  185.  
  186. t3 = ((2 * v3 * sin(angle3)) / g)
  187. vx3 = v3 * cos(angle3)
  188.  
  189. dx = 0.01
  190. xmin = x0
  191. xmax = vx * t * cos(angle)
  192. xmin2 = x02
  193. xmax2 = vx2 * t2 * cos(angle2)
  194. xmin3 = x03
  195. xmax3 = vx3 * t3 * cos(angle3)
  196.  
  197. def func(x0, v, g, y0, angle):
  198. y = x0 * tan(angle) - (1 / (2 * v ** 2)) * ((g * x0 ** 2) / (cos(angle) ** 2)) + y0
  199. if y == 0:
  200. return 0.0
  201. return y
  202.  
  203.  
  204. def func2(x02, v2, y02, angle2):
  205. y2 = x02 * tan(angle2) - (1 / (2 * v2 ** 2)) * ((g * x02 ** 2) / (cos(angle2) ** 2)) + y02
  206. if y2 == 0:
  207. return 0.0
  208. return y2
  209.  
  210.  
  211. def func3(x03, v3, y03, angle3):
  212. y3 = x03 * tan(angle3) - (1 / (2 * v3 ** 2)) * ((g * x03 ** 2) / (cos(angle3) ** 2)) + y03
  213. if y3 == 0:
  214. return 0.0
  215. return y3
  216.  
  217.  
  218. xlist = mlab.frange(xmin, xmax, dx)
  219. xlist2 = mlab.frange(xmin2, xmax2, dx)
  220. xlist3 = mlab.frange(xmin3, xmax3, dx)
  221.  
  222. ylist = [func(x0, v, g, y0, angle) for x0 in xlist]
  223. ylist2 = [func2(x02, v2, y02, angle2) for x02 in xlist2]
  224. ylist3 = [func3(x03, v3, y03, angle3) for x03 in xlist3]
  225.  
  226. pylab.plot(xlist, ylist)
  227. pylab.plot(xlist2, ylist2)
  228. pylab.plot(xlist3, ylist3)
  229.  
  230. pylab.show()
  231.  
  232.  
  233. app = Fly()
  234. app.mainloop()
Add Comment
Please, Sign In to add comment