Advertisement
vatman

Untitled

Oct 6th, 2023
732
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.25 KB | None | 0 0
  1. #!/usr/bin/env python
  2. #GUI application
  3.  
  4. from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
  5. import PySimpleGUI as sg
  6. import pandas as pd
  7. # from Q_test import run_qtest
  8. import matplotlib.pyplot as plt
  9. import ctypes
  10.  
  11. lib = ctypes.CDLL("/media/syatov430/Files/UNN/3_course/ЧМ/lab1/lab1/Q_test.so")
  12.  
  13. # In[]:
  14. df = pd.DataFrame({
  15.     '    Xi    ': [],
  16.     '    Vi    ': [],
  17.     '    V2i    ': [],
  18.     '    ОЛП    ': [],
  19.     '    Hi    ': [],
  20.     '    C1    ': [],
  21.     '    C2    ': [],
  22. })
  23.  
  24. fig, graf = plt.subplots(figsize=(5, 5))
  25. graf = plt.plot([1, 2, 3, 4], [1, 2, 3, 4])
  26.  
  27. list_q = ['Тестовая', 'Основная1', 'Основная2']
  28.  
  29. frame_start_condition = [
  30.     [sg.Radio('1', default=True, group_id=1, key="-U1-"), sg.Radio('-1', group_id=1, key="-U-1-")],
  31. ]
  32.  
  33. frame_output_data = [
  34.     [sg.Output(size=(55, 15), key="-DATA-")],
  35. ]
  36.  
  37. # In[]:
  38. column1 = [
  39.     [sg.DropDown(list_q, default_value=list_q[0], size=(25, 1))],
  40.     [sg.Frame("Начальные Условия", frame_start_condition, size=(180, 50))],
  41.     [sg.Submit(size=(24, 1))],
  42.     [sg.Exit(size=(24, 1))]
  43. ]
  44.  
  45. column2 = [
  46.     [sg.Text("Точность выхода на границу", size=(50, 1))],
  47.     [sg.InputText(default_text="0.0000001", size=(30, 1), key='-EPSOUT-')],
  48.     [sg.Text("Контроль погрешности")],
  49.     [sg.InputText(default_text="0.0001", size=(30, 1), key='-EPS-')],
  50.     [sg.Text("Число шагов")],
  51.     [sg.InputText(default_text="1000", size=(30, 1), key='-NMAX-')],
  52.     [sg.Text("Начальный шаг")],
  53.     [sg.InputText(default_text="0.1", size=(30, 1), key='-HSTART-')],
  54.     [sg.Text("Максимальный X")],
  55.     [sg.InputText(default_text="20", size=(30, 1), key='-XMAX-')],
  56. ]
  57.  
  58. column_table = [
  59.     [sg.Table(values=df.values.tolist(), headings=df.columns.tolist(),
  60.             alternating_row_color='darkblue', key='-TABLE-',
  61.             row_height = 25, vertical_scroll_only=False, size=(200, 100),
  62.             justification='left', auto_size_columns=True)],
  63. ]
  64.  
  65. column_graf = [
  66.     [sg.Canvas(key="-CANVAS-")],
  67. ]
  68.  
  69. # In[]:
  70. layout = [
  71.     [sg.Column(column1), sg.VerticalSeparator(), sg.Column(column2), sg.Frame("Данные", frame_output_data, element_justification='right')],
  72.     [sg.HorizontalSeparator()],
  73.     [sg.Frame("Таблица точек", column_table, size=(500, 500)), sg.VerticalSeparator(), sg.Column(column_graf, size=(500, 500), justification='right')],
  74. ]
  75.  
  76. # In[]:
  77. window = sg.Window('LAB1', layout, finalize=True, resizable=True, grab_anywhere=True, )
  78.  
  79. canvas_elem = window["-CANVAS-"]
  80. canvas = FigureCanvasTkAgg(fig, master=canvas_elem.Widget)
  81. canvas.get_tk_widget().pack(fill='both', expand=1)
  82.  
  83. while True:                             # The Event Loop
  84.     event, values = window.read()
  85.     window.FindElement('-DATA-').Update('')
  86.     print(event, values) #debug
  87.     if event in (None, 'Exit', 'Cancel'):
  88.         break
  89.     if event == 'Submit':
  90.         u0 = 1. if window["-U1-"].Get() == True else -1.
  91.         # df = run_qtest(float(window["-HSTART-"].Get()), u0, 1000, 0.001, 0.0001)
  92.         lib.rungeKuttaAdaptive(float(window["-HSTART-"].Get()), u0, 1000, 0.001, 0.0001)
  93.         window["-TABLE-"].Update(values = df.values.tolist())
  94.  
  95. window.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement