Событие кнопки для построения графика - PullRequest
0 голосов
/ 25 мая 2018

Я новичок в python и у меня есть проект, над которым я работаю.Я пытаюсь получить графический интерфейс, который, когда вы нажимаете кнопку, появляется график.Есть четыре кнопки и 4 разных участка.Я знаю, что графики работают, потому что я написал их отдельно, но не уверен, как я пытаюсь написать правильную функцию для события.Это то, что я имею до сих пор.

    import tkinter as tk 
        root= tk.Tk()
        root.title('Project: S-Parameters & Stability')
        frame = tk.Frame(root, relief='raised', bd=3) #bd = border
        frame.pack(pady=10)

    import numpy as np
    import matplotlib.pyplot as plt


    Frequency,S11_Mag,S11_Ph,S21_Mag,S21_Ph,S12_Mag,S12_Ph,S22_Mag,S22_Ph
    = np.loadtxt('/Users/polo/Desktop/S2P_File.csv',
                  unpack = True,
                  delimiter = ',')

    def plot_graph(something):
        #print(something)
        if something == 'S11':
            plt.figure(1)       
            # plotting the points
            plt.subplot(211) 
            plt.plot(Frequency,S11_Mag)
            # giving a title to my graph
            plt.title('S11 Magnitude and Phase') 

        # naming the x axis
        plt.xlabel('Frequency (GHz)')
        # naming the y axis
        plt.ylabel('Magnitude (dB)')
        plt.subplot(212) 
        plt.plot(Frequency,S11_Ph) 

        # naming the x axis
        plt.xlabel('Frequency (GHz)')
        # naming the y axis
        plt.ylabel('Phase (Degree)')
    elif something == 'S22':
        plt.figure(2)       
        # plotting the points
        plt.subplot(211) 
        plt.plot(Frequency,S22_Mag)
        # giving a title to my graph
        plt.title('S22 Magnitude and Phase') 

        # naming the x axis
        plt.xlabel('Frequency (GHz)')
        # naming the y axis
        plt.ylabel('Magnitude (dB)')
        plt.subplot(212) 
        plt.plot(Frequency,S22_Ph) 

        # naming the x axis
        plt.xlabel('Frequency (GHz)')
        # naming the y axis
        plt.ylabel('Phase (Degree)')
    elif something == 'S21':
        plt.figure(3)       
        # plotting the points
        plt.subplot(211) 
        plt.plot(Frequency,S21_Mag)
        # giving a title to my graph
        plt.title('S21 Magnitude and Phase') 

        # naming the x axis
        plt.xlabel('Frequency (GHz)')
        # naming the y axis
        plt.ylabel('Magnitude (dB)')
        plt.subplot(212) 
        plt.plot(Frequency,S21_Ph) 

        # naming the x axis
        plt.xlabel('Frequency (GHz)')
        # naming the y axis
        plt.ylabel('Phase (Degree)')
    elif something == 'S12':
        plt.figure(4)       
        # plotting the points
        plt.subplot(211) 
        plt.plot(Frequency,S12_Mag)
        # giving a title to my graph
        plt.title('S22 Magnitude and Phase') 

        # naming the x axis
        plt.xlabel('Frequency (GHz)')
        # naming the y axis
        plt.ylabel('Magnitude (dB)')
        plt.subplot(212) 
        plt.plot(Frequency,S12_Ph) 

        # naming the x axis
        plt.xlabel('Frequency (GHz)')
        # naming the y axis
        plt.ylabel('Phase (Degree)')


tk.Button(frame, text="S11",  command = lambda:plot_graph('S11')).pack(side=tk.LEFT, fill = tk.Y)
tk.Button(frame, text="S22",  command = lambda:plot_graph('S22')).pack(side=tk.LEFT, fill = tk.Y)
tk.Button(frame, text="S21",  command = lambda:plot_graph('S21')).pack(side=tk.LEFT, fill = tk.Y)
tk.Button(frame, text="S12",  command = lambda:plot_graph('S12')).pack(side=tk.LEFT, fill = tk.Y)


root.mainloop()
}

Я знаю, что это неправильно, но я не знаю, как правильно обработать событие.Любая помощь будет оценена.

Спасибо,

ПОЛО

1 Ответ

0 голосов
/ 25 мая 2018

Вы не импортировали серверную часть matplotlib.Вам нужно:

from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

, а затем настроить холст для построения графика и передать ему рисунок:

            canvas=FigureCanvasTkAgg(fig,master=frame)
            canvas.get_tk_widget().grid(row=0,column=0,columnspan=4)

Я сделаю для вас первый график:

def plot_graph(something):
    #print(something)
    if something == 'S11':
        fig = plt.figure(1)
        canvas=FigureCanvasTkAgg(fig,master=frame)
        #the next line will depend on which widget you are going to 
        #use so you're going to have to do some work here.
        canvas.get_tk_widget().something...
        # plotting the points
        ax1=fig.add_subplot(211) 
        ax1.plot(Frequency,S11_Mag)
        # giving a title to my graph
        ax1.title('S11 Magnitude and Phase') 

        # naming the x axis
        ax1.xlabel('Frequency (GHz)')
        # naming the y axis
        ax1.ylabel('Magnitude (dB)')
        ax2=fig.add_subplot(212) 
        ax2.plot(Frequency,S11_Ph) 

        # naming the x axis
        ax2.xlabel('Frequency (GHz)')
        # naming the y axis
        ax2.ylabel('Phase (Degree)')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...