Форум программистов, компьютерный форум, киберфорум
Python: Tkinter
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.70/76: Рейтинг темы: голосов - 76, средняя оценка - 4.70
0 / 0 / 1
Регистрация: 01.10.2014
Сообщений: 87

TKinter+matplotlib: передача введенных параметров графику

20.09.2016, 19:19. Показов 14777. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. У меня есть окно (StartPage), где нужно ввести данные, а потом нажать на кнопку , чтобы в этом же окне появился график из matplotlib, который определяется параметрами, введенными в StartPage. В интернете нашел способ (command: controller.show_frame) как запустить график, но передать параметр через entry в StartPage не получается - при нажатии на кнопку ничего не происходит. Далее попробовал bind, но с ним то же самое. В общем, вот код. За основу брал https://stackoverflow.com/ques... in-tkinter
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import matplotlib
matplotlib.use('TkAgg')
 
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure
 
import numpy as np
 
import tkinter as tk
from tkinter import ttk
 
class SetOfBTCApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        container = tk.Frame(self)#рамки окна
 
        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)
        self.frames = {}
        for f in (StartPage, PageThree):
            frame = f(container, self)
            self.frames[f] = frame
            frame.grid(row=0, column=0, sticky="nwse")
 
        self.show_frame(StartPage)
 
    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()
 
a = int(0)
B = int(0)
 
 
def callback(event):
    global a
    a = ent1.get()
    global B
    B = ent2.get()
    controller.show_frame(PageThree)
 
class StartPage(tk.Frame):
 
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        label = tk.Label(self, text="a=", font=("Verdana", 12))
        label.place(y = 40, x = 140)
        ent1 = tk.Entry(self, width=20, bd=3)
        ent1.place(y=40, x=180)
 
        label1 = tk.Label(self, text="B=", font=("Verdana", 12))
        label1.place(y=70, x=140)
 
        ent2 = tk.Entry(self, width=20, bd=3)
        ent2.place(y=70, x=180)
        btn3 = ttk.Button(self, text="Graph page")
        btn3.place(y=100, x=200)
        btn3.bind("<Button-3>", lambda: callback)
 
 
class PageThree(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        label = tk.Label(self, text="Graph Page", font=("Verdana", 12))
        label.pack(pady=10, padx=10)
        btn1 = ttk.Button(self, text="to home", command=lambda: controller.show_frame(StartPage))
        btn1.pack()
        fig = Figure(figsize=(5, 5), dpi=100)
        fn = fig.add_subplot(111)
        x = np.arange(1, B)
        y = a * x ** (3 / 2)
 
        fn.plot(x, y)
        canvas = FigureCanvasTkAgg(fig, self)
        canvas.show()
        toolbar = NavigationToolbar2TkAgg(canvas, self)
        toolbar.update()
        canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=True)
        canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
 
 
app = SetOfBTCApp()
app.mainloop()
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.09.2016, 19:19
Ответы с готовыми решениями:

Передача введенных параметров
Здравствуйте, проблема в следующем-я чайник в php, задание-сделать бд с доступом в интернет. База данных про антибиотики. Так вот, у меня...

Передача параметров переменной длины введенных с клавиатуры в вызов функции
Есть функция, как её вызвать c переменной длиной параметров введенных с клавиатуры? Как передать в функцию параметры переменной длины...

Matplotlib в Tkinter
Не могу изобразить график в tkinter. &quot;TypeError: 'AxesSubplot' object is not iterable&quot; Без tkinter все работает. Помогите,...

5
 Аватар для ilnurgi
141 / 141 / 38
Регистрация: 20.02.2012
Сообщений: 597
21.09.2016, 14:13
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Application(tk.Tk):
 
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
 
        self.ent1 = tk.Entry(self)
        self.ent1.pack()
 
        self.ent2 = tk.Entry(self)
        self.ent2.pack()
 
        ttk.Button(self, text="Graph page123", command=self.show).pack()
 
    def show(self):
        fig = Figure(figsize=(5, 5), dpi=100)
        fn = fig.add_subplot(111)
        x = np.arange(1, int(self.ent2.get()))
        y = int(self.ent2.get()) * x ** (3 / 2)
 
        fn.plot(x, y)
        canvas = FigureCanvasTkAgg(fig, self)
        canvas.show()
 
        toolbar = NavigationToolbar2TkAgg(canvas, self)
        toolbar.update()
        canvas.get_tk_widget().pack()
        canvas._tkcanvas.pack()
дальше уж сами
0
0 / 0 / 1
Регистрация: 01.10.2014
Сообщений: 87
21.09.2016, 17:04  [ТС]
ilnurgi, Спасибо. Добавил еще невозможность создавать график снова, если таковой уже создан посредством
Python
1
2
 self.btn = ttk.Button(self, text="Graph page123", command=self.show)
        self.btn.pack()
в главной функции и
Python
1
self.btn.config(state='disabled')
в show, так как они друг под другом рисовались, сплющиваясь.
0
0 / 0 / 0
Регистрация: 06.06.2017
Сообщений: 1
03.12.2017, 12:01
Можешь пожалуйста показать итоговый код программы? буду безумно благодарен
0
0 / 0 / 1
Регистрация: 01.10.2014
Сообщений: 87
03.12.2017, 19:37  [ТС]
qazdr1,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
mport matplotlib
 
matplotlib.use('TkAgg')
 
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure
 
import numpy as np
 
import tkinter as tk
from tkinter import ttk
 
 
 
class Application(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        title1 = self.title("draw a graph y = ax^(3/2)")
 
        print("made by zmk")
        self.label0 = tk.Label(self, text="y=ax^(3/2)")
        self.label0.pack()
        self.label1 = tk.Label(self, text="a=")
        self.label1.pack()
        self.ent1 = tk.Entry(self)
        self.ent1.bind('<Any-KeyRelease>', self.foo)
        self.ent1.pack()
 
        self.label2 = tk.Label(self, text="b=")
        self.label2.pack()
        self.ent2 = tk.Entry(self)
        self.ent2.bind('<Any-KeyRelease>', self.foo)
        self.ent2.pack()
 
        self.btn = ttk.Button(self, text="Graph page",state='disabled', command=self.show)
 
        self.btn.pack()
 
    def foo(self, event):
        data1 = self.ent1.get()
        data2 = self.ent2.get()
        if len(data1) != 0 and len(data2) != 0:
            self.btn.config(state='enabled')
 
    def show(self):
        self.btn.config(state='disabled')
        fig = Figure()
        fn = fig.add_subplot(111) 
        b = float(self.ent2.get())+1 
        x = np.arange(0, b)
        a = float(self.ent1.get())
        y = a * x ** (3 / 2)
        line = fn.plot(x, y,  label = 'y = %dx^(3/2)' %a, color = 'green', linewidth=4, alpha = 0.5)
        xax = fn.xaxis  
        yax = fn.yaxis 
 
        xlabels = xax.get_ticklabels()
        ylabels = yax.get_ticklabels()
 
        xax.grid(True)
        st = 'Growth of sales'
        fn.set_title(st, size=20, color='green')
        fn.set_xlabel('Äíè', {'fontname': 'Arial'}, fontweight='light', fontsize=14, color='grey')
        fn.set_ylabel('Îáúåì ïðîäàæ', {'fontname': 'Arial'}, fontweight='light', fontsize=14, color='grey')
 
        for label in xlabels:
 
            label.set_color('grey')
 
            label.set_fontsize(14)
 
        for label in ylabels:
            label.set_color("grey")
            label.set_fontsize(16)
 
        fn.legend(loc='best', frameon=True)
        canvas = FigureCanvasTkAgg(fig, self)
        canvas.show()
 
        toolbar = NavigationToolbar2TkAgg(canvas, self)
        toolbar.update()
        canvas.get_tk_widget().pack()
        canvas._tkcanvas.pack()
 
 
window = Application()
window.mainloop()
0
0 / 0 / 0
Регистрация: 20.07.2016
Сообщений: 98
03.03.2020, 16:52
Здравствуйте! Чтобы темы не плодить, спрошу тут. У меня вопрос как раз по теме tkinter+pyplot. Я тоже делаю свой оконный рисовальщик графиков под win.
Здесь в посте выше из модуля matplotlib.backends.backend_tkagg импортируют два объекта FigureCanvasTkAgg, NavigationToolbar2TkAgg. Чтобы разобраться что они делают и зачем нужны я пошел на сайт официальной документации, но там мягко говоря "скудное" описание модуля backend_tkagg. То есть, там нет упоминания про эти объекты. Вопрос, как и где в документации искать объекты, которые присутствуют в модуле и описание что они делают?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.03.2020, 16:52
Помогаю со студенческими работами здесь

График matplotlib в окне tkinter?
как сделать так,что бы график matplotlib был в окне tkinter

Как связать tkinter c numpy, matplotlib?
Сделал окно c помощью tkinter, принимает значения a,b,c, интервал (x1,x2), также шаг (k). Сделал вывод графика с помощью...

Проблема с отображением графика Tkinter + numpy + matplotlib
Всем привет! Есть программа, которая строит графики по выбранным функциям и заданным границам. Все функции выполняются без ошибок, но...

Tkinter+Matplotlib ввод функции в поле Entry
Доброго времени суток! Занимаюсь разработкой программы для построения графика функции с gui при помощи Tkinter и matplotlib. Встал...

Tkinter.grid() - получение параметров
Суть: Имеются 2 кнопки, каждая создана такой вот строчкой: but.grid(row=i, column = n, columnspan=2, rowspan=2) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru