Форум сайта python.su
Есть раздельно написанные две программки
Где matplotlib там строится график при вводе данных, а в TKinter сделал простенький GUI для ввода этих данных для постройки графика. Помогите пожалуйста сделать так что бы при введённых данных и нажатии кнопки “рассчитать” в GUI выводился график из matplotlib.
1) Matplotlib
import matplotlib.pyplot as plt def mechanical_characteristic(n, Pn, Mn, Nn, Mk, Nk): if n == 0: return 0 # В нулевой точке характеристика равна 0 elif n == Nn: return Pn elif n == Nk: return Mk else: return Mn * (1 - (n / Nn)**2) def load_characteristic(n_values, Rzv, n1, Pn, Mn, Nn, Mk, Nk): table = [] for n in n_values: if n == 0: mechanical_load = 0 elif n == Nn: mechanical_load = Pn elif n == Nk: mechanical_load = Mk else: mechanical_load = Mn * (1 - (n / Nn)**2) vc1 = 2 * 3.14159 * Rzv * n1 / 60 # Уточнение значения внешней силы Wc, соответствующей n1 (vс1) Wc = mechanical_load / vc1 # Добавление данных в таблицу row = [n, vc1, Wc] table.append(row) return table load_chart = load_characteristic(n_values, Rzv, n1, Pn, Mn, Nn, Mk, Nk) # Создание списков значений для графиков n_values_plot = [row[0] for row in load_chart] external_forces = [row[2] for row in load_chart] mechanical_values = [mechanical_characteristic(n, Pn, Mn, Nn, Mk, Nk) for n in n_values] # Построение графика plt.figure(figsize=(10, 6)) plt.plot(external_forces, n_values_plot, label='характеристика', color='red') plt.xlabel('Внешняя сила, Нм') plt.ylabel('Частота вращения, об/мин') plt.title('характеристика') plt.legend() # Границы plt.xlim(0, 400) plt.ylim(0, 400) plt.grid(True) plt.show()
from tkinter import * root = Tk() #photo = PhotoImage(file='anchor.ico') #root.iconphoto(False, photo) root['bg'] = '#ffc966' root.title('Расчет нагрузочной характеристики') root.wm_attributes('-alpha', 1) root.geometry('680x500') root.maxsize(1000, 1000) root.minsize(500, 500) root.resizable(width=True, height=True) name = Label(root, text='Расчет нагрузочной характеристики Mc(t) при съемке судна с якоря', bg='white', font=40) name.grid(row=0, column=0, columnspan=2, stick='we', padx=10, pady=10) rzvt = Label(root, text='Радиус', bg='white', font=40) rzv = Entry(root, bg='white', font=30) n1t = Label(root, text='Частота вращения', bg='white', font=40) n1 = Entry(root, bg='white', font=30) pnt = Label(root, text='Номинальная мощность ИД в Вт', bg='white', font=40) pn = Entry(root, bg='white', font=30) mnt = Label(root, text='Номинальный момент', bg='white', font=40) mn = Entry(root, bg='white', font=30) nnt = Label(root, text='Номинальная частота вращения', bg='white', font=40) nn = Entry(root, bg='white', font=30) mkt = Label(root, text='Значение критичсекой нагрузки', bg='white', font=40) mk = Entry(root, bg='white', font=30) nkt = Label(root, text='Занчение критичечкой частоты вращения', bg='white', font=40) nk = Entry(root, bg='white', font=30) rzvt.grid(row=1, column=0, stick='we', padx=10, pady=10) rzv.grid(row=1, column=1) n1t.grid(row=2, column=0, stick='we', padx=10, pady=10) n1.grid(row=2, column=1) pnt.grid(row=3, column=0, stick='we', padx=10, pady=10) pn.grid(row=3, column=1) mnt.grid(row=4, column=0, stick='we', padx=10, pady=10) mn.grid(row=4, column=1) nnt.grid(row=5, column=0, stick='we', padx=10, pady=10) nn.grid(row=5, column=1) mkt.grid(row=6, column=0, stick='we', padx=10, pady=10) mk.grid(row=6, column=1) nkt.grid(row=7, column=0, stick='we', padx=10, pady=10) nk.grid(row=7, column=1) btn = Button(root, text="Рассчитать", font=40, padx=266, pady=10) btn.grid(row=8, column=0, columnspan=2, stick='we', padx=10, pady=10) root.grid_rowconfigure(8, minsize=100) root.mainloop()
Отредактировано elaskins (Март 17, 2024 20:06:55)
Офлайн
что такое n_values ?
import matplotlib.pyplot as plt def mechanical_characteristic(n, Pn, Mn, Nn, Mk, Nk): # Функция для вычисления значений механической характеристики ЭД в зависимости от частоты вращения if n == 0: return 0 # В нулевой точке характеристика равна 0 elif n == Nn: return Pn # В точке номинальной частоты характеристика равна номинальной мощности ЭД elif n == Nk: return Mk # В точке критической частоты характеристика равна критической нагрузке else: return Mn * (1 - (n / Nn)**2) # Здесь используем номинальный момент Mn # Расчет нагрузочной характеристики Mc = f(n) def load_characteristic(n_values, Rzv, n1, Pn, Mn, Nn, Mk, Nk): # Функция для вычисления значений нагрузочной характеристики ЭД в зависимости от частоты вращения table = [] for n in n_values: # Расчет механической характеристики для данной частоты вращения if n == 0: mechanical_load = 0 elif n == Nn: mechanical_load = Pn elif n == Nk: mechanical_load = Mk else: mechanical_load = Mn * (1 - (n / Nn)**2) # Используем номинальный момент Mn # Расчет скорости подтягивания судна vc1 = 2 * 3.14159 * Rzv * n1 / 60 # Уточнение значения внешней силы Wc, соответствующей n1 (vс1) Wc = mechanical_load / vc1 # Добавление данных в таблицу row = [n, vc1, Wc] table.append(row) return table def build_graph(n_values, Rzv, n1, Pn, Mn, Nn, Mk, Nk): # Расчет нагрузочной характеристики load_chart = load_characteristic(n_values, Rzv, n1, Pn, Mn, Nn, Mk, Nk) # Создание списков значений для графиков n_values_plot = [row[0] for row in load_chart] external_forces = [row[2] for row in load_chart] # Расчет значений механической характеристики mechanical_values = [mechanical_characteristic(n, Pn, Mn, Nn, Mk, Nk) for n in n_values] # Построение графика plt.figure(figsize=(10, 6)) plt.plot(external_forces, n_values_plot, label='Нагрузочная характеристика', color='red') plt.xlabel('Внешняя сила, Нм') plt.ylabel('Частота вращения, об/мин') plt.title('Нагрузочная характеристика') plt.legend() # Границы plt.xlim(0, 400) plt.ylim(0, 400) plt.grid(True) plt.show() def btn_on(): entry_data = ( rzv.get(), n1.get(), pn.get(), mn.get(), nn.get(), mk.get(), nk.get(), ) print(*entry_data, sep='\n') # build_graph(n_values=???, *entry_data) from tkinter import * root = Tk() #photo = PhotoImage(file='anchor.ico') #root.iconphoto(False, photo) root['bg'] = '#ffc966' root.title('Расчет нагрузочной характеристики') root.wm_attributes('-alpha', 1) root.geometry('680x500') root.maxsize(1000, 1000) root.minsize(500, 500) root.resizable(width=True, height=True) name = Label(root, text='Расчет нагрузочной характеристики Mc(t) при съемке судна с якоря', bg='white', font=40) name.grid(row=0, column=0, columnspan=2, stick='we', padx=10, pady=10) rzvt = Label(root, text='Радиус', bg='white', font=40) rzv = Entry(root, bg='white', font=30) n1t = Label(root, text='Частота вращения', bg='white', font=40) n1 = Entry(root, bg='white', font=30) pnt = Label(root, text='Номинальная мощность ИД в Вт', bg='white', font=40) pn = Entry(root, bg='white', font=30) mnt = Label(root, text='Номинальный момент', bg='white', font=40) mn = Entry(root, bg='white', font=30) nnt = Label(root, text='Номинальная частота вращения', bg='white', font=40) nn = Entry(root, bg='white', font=30) mkt = Label(root, text='Значение критичсекой нагрузки', bg='white', font=40) mk = Entry(root, bg='white', font=30) nkt = Label(root, text='Занчение критичечкой частоты вращения', bg='white', font=40) nk = Entry(root, bg='white', font=30) rzvt.grid(row=1, column=0, stick='we', padx=10, pady=10) rzv.grid(row=1, column=1) n1t.grid(row=2, column=0, stick='we', padx=10, pady=10) n1.grid(row=2, column=1) pnt.grid(row=3, column=0, stick='we', padx=10, pady=10) pn.grid(row=3, column=1) mnt.grid(row=4, column=0, stick='we', padx=10, pady=10) mn.grid(row=4, column=1) nnt.grid(row=5, column=0, stick='we', padx=10, pady=10) nn.grid(row=5, column=1) mkt.grid(row=6, column=0, stick='we', padx=10, pady=10) mk.grid(row=6, column=1) nkt.grid(row=7, column=0, stick='we', padx=10, pady=10) nk.grid(row=7, column=1) btn = Button(root, text="Рассчитать", font=40, padx=266, pady=10, command=btn_on) btn.grid(row=8, column=0, columnspan=2, stick='we', padx=10, pady=10) root.grid_rowconfigure(8, minsize=100) root.mainloop()
Офлайн
xam1816значение частоты вращения заданные в зависимости от условий, случайно удалил строку:
что такое n_values ?
n_values = [50, 100, 200, 300, 400]
Отредактировано elaskins (Март 17, 2024 15:28:53)
Офлайн
xam1816
что такое n_values ?
import matplotlib.pyplot as plt n_values = [50, 100, 200, 300, 400] def mechanical_characteristic(n, pn, mn, nn, mk, nk): # Функция для вычисления значений механической характеристики ЭД в зависимости от частоты вращения if n == 0: return 0 # В нулевой точке характеристика равна 0 elif n == nn: return pn # В точке номинальной частоты характеристика равна номинальной мощности ЭД elif n == nk: return mk # В точке критической частоты характеристика равна критической нагрузке else: return mn * (1 - (n / nn)**2) # Здесь используем номинальный момент Mn # Расчет нагрузочной характеристики Mc = f(n) def load_characteristic(n_values, rzv, n1, pn, mn, nn, mk, nk): # Функция для вычисления значений нагрузочной характеристики ЭД в зависимости от частоты вращения table = [] for n in n_values: # Расчет механической характеристики для данной частоты вращения if n == 0: mechanical_load = 0 elif n == nn: mechanical_load = pn elif n == nk: mechanical_load = mk else: mechanical_load = mn * (1 - (n / nn)**2) # Используем номинальный момент Mn # Расчет скорости подтягивания судна vc1 = 2 * 3.14159 * rzv * n1 / 60 # Уточнение значения внешней силы Wc, соответствующей n1 (vс1) Wc = mechanical_load / vc1 # Добавление данных в таблицу row = [n, vc1, Wc] table.append(row) return table def build_graph(n_values, rzv, n1, pn, mn, nn, mk, nk): # Расчет нагрузочной характеристики load_chart = load_characteristic(n_values, rzv, n1, pn, mn, nn, mk, nk) # Создание списков значений для графиков n_values_plot = [row[0] for row in load_chart] external_forces = [row[2] for row in load_chart] # Расчет значений механической характеристики mechanical_values = [mechanical_characteristic(n, pn, mn, nn, mk, nk) for n in n_values] # Построение графика plt.figure(figsize=(10, 6)) plt.plot(external_forces, n_values_plot, label='Нагрузочная характеристика', color='red') plt.xlabel('Внешняя сила, Нм') plt.ylabel('Частота вращения, об/мин') plt.title('Нагрузочная характеристика') plt.legend() # Границы plt.xlim(0, 400) plt.ylim(0, 400) plt.grid(True) plt.show() def btn_on(): entry_data = ( rzv.get(), n1.get(), pn.get(), mn.get(), nn.get(), mk.get(), nk.get() ) print(*entry_data, sep='\n') build_graph(*entry_data) from tkinter import * root = Tk() #photo = PhotoImage(file='anchor.ico') #root.iconphoto(False, photo) root['bg'] = '#ffc966' root.title('Расчет нагрузочной характеристики') root.wm_attributes('-alpha', 1) root.geometry('680x500') root.maxsize(1000, 1000) root.minsize(500, 500) root.resizable(width=True, height=True) name = Label(root, text='Расчет нагрузочной характеристики Mc(t) при съемке судна с якоря', bg='white', font=40) name.grid(row=0, column=0, columnspan=2, stick='we', padx=10, pady=10) rzvt = Label(root, text='Радиус', bg='white', font=40) rzv = Entry(root, bg='white', font=30) n1t = Label(root, text='Частота вращения', bg='white', font=40) n1 = Entry(root, bg='white', font=30) pnt = Label(root, text='Номинальная мощность ИД в Вт', bg='white', font=40) pn = Entry(root, bg='white', font=30) mnt = Label(root, text='Номинальный момент', bg='white', font=40) mn = Entry(root, bg='white', font=30) nnt = Label(root, text='Номинальная частота вращения', bg='white', font=40) nn = Entry(root, bg='white', font=30) mkt = Label(root, text='Значение критичсекой нагрузки', bg='white', font=40) mk = Entry(root, bg='white', font=30) nkt = Label(root, text='Занчение критичечкой частоты вращения', bg='white', font=40) nk = Entry(root, bg='white', font=30) rzvt.grid(row=1, column=0, stick='we', padx=10, pady=10) rzv.grid(row=1, column=1) n1t.grid(row=2, column=0, stick='we', padx=10, pady=10) n1.grid(row=2, column=1) pnt.grid(row=3, column=0, stick='we', padx=10, pady=10) pn.grid(row=3, column=1) mnt.grid(row=4, column=0, stick='we', padx=10, pady=10) mn.grid(row=4, column=1) nnt.grid(row=5, column=0, stick='we', padx=10, pady=10) nn.grid(row=5, column=1) mkt.grid(row=6, column=0, stick='we', padx=10, pady=10) mk.grid(row=6, column=1) nkt.grid(row=7, column=0, stick='we', padx=10, pady=10) nk.grid(row=7, column=1) btn = Button(root, text="Рассчитать", font=40, padx=266, pady=10, command=btn_on) btn.grid(row=8, column=0, columnspan=2, stick='we', padx=10, pady=10) root.grid_rowconfigure(8, minsize=100) root.mainloop()
Офлайн
import matplotlib.pyplot as plt def mechanical_characteristic(n, Pn, Mn, Nn, Mk, Nk): # Функция для вычисления значений механической характеристики ЭД в зависимости от частоты вращения if n == 0: return 0 # В нулевой точке характеристика равна 0 elif n == Nn: return Pn # В точке номинальной частоты характеристика равна номинальной мощности ЭД elif n == Nk: return Mk # В точке критической частоты характеристика равна критической нагрузке else: return Mn * (1 - (n / Nn)**2) # Здесь используем номинальный момент Mn # Расчет нагрузочной характеристики Mc = f(n) def load_characteristic(n_values, Rzv, n1, Pn, Mn, Nn, Mk, Nk): # Функция для вычисления значений нагрузочной характеристики ЭД в зависимости от частоты вращения table = [] for n in n_values: # Расчет механической характеристики для данной частоты вращения if n == 0: mechanical_load = 0 elif n == Nn: mechanical_load = Pn elif n == Nk: mechanical_load = Mk else: mechanical_load = Mn * (1 - (n / Nn)**2) # Используем номинальный момент Mn # Расчет скорости подтягивания судна vc1 = 2 * 3.14159 * Rzv * n1 / 60 # Уточнение значения внешней силы Wc, соответствующей n1 (vс1) Wc = mechanical_load / vc1 # Добавление данных в таблицу row = [n, vc1, Wc] table.append(row) return table def build_graph(n_values, Rzv, n1, Pn, Mn, Nn, Mk, Nk): # Расчет нагрузочной характеристики load_chart = load_characteristic(n_values, Rzv, n1, Pn, Mn, Nn, Mk, Nk) # Создание списков значений для графиков n_values_plot = [row[0] for row in load_chart] external_forces = [row[2] for row in load_chart] # Расчет значений механической характеристики mechanical_values = [mechanical_characteristic(n, Pn, Mn, Nn, Mk, Nk) for n in n_values] # Построение графика plt.figure(figsize=(10, 6)) plt.plot(external_forces, n_values_plot, label='Нагрузочная характеристика', color='red') plt.xlabel('Внешняя сила, Нм') plt.ylabel('Частота вращения, об/мин') plt.title('Нагрузочная характеристика') plt.legend() # Границы plt.xlim(0, 400) plt.ylim(0, 400) plt.grid(True) plt.show() def btn_on(): entry_data = ( int(i) for i in ( rzv.get(), n1.get(), pn.get(), mn.get(), nn.get(), mk.get(), nk.get()) ) n_values = [50, 100, 200, 300, 400] build_graph(n_values, *entry_data) from tkinter import * root = Tk() #photo = PhotoImage(file='anchor.ico') #root.iconphoto(False, photo) root['bg'] = '#ffc966' root.title('Расчет нагрузочной характеристики') root.wm_attributes('-alpha', 1) root.geometry('680x500') root.maxsize(1000, 1000) root.minsize(500, 500) root.resizable(width=True, height=True) name = Label(root, text='Расчет нагрузочной характеристики Mc(t) при съемке судна с якоря', bg='white', font=40) name.grid(row=0, column=0, columnspan=2, stick='we', padx=10, pady=10) rzvt = Label(root, text='Радиус', bg='white', font=40) rzv = Entry(root, bg='white', font=30) n1t = Label(root, text='Частота вращения', bg='white', font=40) n1 = Entry(root, bg='white', font=30) pnt = Label(root, text='Номинальная мощность ИД в Вт', bg='white', font=40) pn = Entry(root, bg='white', font=30) mnt = Label(root, text='Номинальный момент', bg='white', font=40) mn = Entry(root, bg='white', font=30) nnt = Label(root, text='Номинальная частота вращения', bg='white', font=40) nn = Entry(root, bg='white', font=30) mkt = Label(root, text='Значение критичсекой нагрузки', bg='white', font=40) mk = Entry(root, bg='white', font=30) nkt = Label(root, text='Занчение критичечкой частоты вращения', bg='white', font=40) nk = Entry(root, bg='white', font=30) rzvt.grid(row=1, column=0, stick='we', padx=10, pady=10) rzv.grid(row=1, column=1) n1t.grid(row=2, column=0, stick='we', padx=10, pady=10) n1.grid(row=2, column=1) pnt.grid(row=3, column=0, stick='we', padx=10, pady=10) pn.grid(row=3, column=1) mnt.grid(row=4, column=0, stick='we', padx=10, pady=10) mn.grid(row=4, column=1) nnt.grid(row=5, column=0, stick='we', padx=10, pady=10) nn.grid(row=5, column=1) mkt.grid(row=6, column=0, stick='we', padx=10, pady=10) mk.grid(row=6, column=1) nkt.grid(row=7, column=0, stick='we', padx=10, pady=10) nk.grid(row=7, column=1) btn = Button(root, text="Рассчитать", font=40, padx=266, pady=10, command=btn_on) btn.grid(row=8, column=0, columnspan=2, stick='we', padx=10, pady=10) root.grid_rowconfigure(8, minsize=100) root.mainloop()
Офлайн