Уведомления

Группа в Telegram: @pythonsu

#1 Март 16, 2024 18:20:45

elaskins
Зарегистрирован: 2020-12-05
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите объеденить TKinter и Matplotlib plz:)

Есть раздельно написанные две программки
Где 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()


2) GUI TKinter

 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)

Офлайн

#2 Март 16, 2024 20:40:58

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1353
Репутация: +  118  -
Профиль   Отправить e-mail  

Помогите объеденить TKinter и Matplotlib plz:)

что такое 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()

Офлайн

#3 Март 17, 2024 13:55:25

elaskins
Зарегистрирован: 2020-12-05
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите объеденить TKinter и Matplotlib plz:)

xam1816
что такое n_values ?
значение частоты вращения заданные в зависимости от условий, случайно удалил строку:

 n_values = [50, 100, 200, 300, 400]

Отредактировано elaskins (Март 17, 2024 15:28:53)

Офлайн

#4 Март 17, 2024 16:34:48

elaskins
Зарегистрирован: 2020-12-05
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите объеденить TKinter и Matplotlib plz:)

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()

чет ему не нравится…

Офлайн

#5 Март 17, 2024 16:49:25

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1353
Репутация: +  118  -
Профиль   Отправить e-mail  

Помогите объеденить TKinter и Matplotlib plz:)

  
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()

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version