2017-06-23 2 views
0

Ich suche nach einer Anleitung, wo man einige Informationen über die Erstellung einer GUI in tkinter für Graphen, die ich bereits in Python programmiert habe, nachschlagen kann. Was ich tun möchte, ist eine GUI zu erstellen, die CSV-Daten importieren kann, und dann würde der Benutzer auf eine Schaltfläche klicken, die den gewünschten Diagrammtyp anzeigen würde. Im Moment habe ich 4 Grafiken, die ich in Python erstellt habe und ich bin mir nicht sicher, wie ich sie ins Tkinter-Format bringen soll. Ich bin sehr neu in Python und Tkinter. Jede Anleitung würde sehr geschätzt werden. Hier ist der Code, den ich bisher für tkinter gemacht habe.Tkinter gui graph

import tkinter as tk 
from tkinter.filedialog import askopenfilename 
from tkinter import * 
import pandas as pd 
import subprocess 
import webbrowser 
import sys 

def import_csv_data(): 
    global v 
    csv_file_path = askopenfilename() 
    print(csv_file_path) 
    v.set(csv_file_path) 
    df = pd.read_csv(csv_file_path) 

root = tk.Tk() 
tk.Label(root, text='File Path').grid(row=0, column=0) 
v = tk.StringVar() 
entry = tk.Entry(root, textvariable=v).grid(row=0, column=1) 
tk.Button(root, text='Browse Data Set',command=import_csv_data).grid(row=1, column=0) 
tk.Button(root, text='Close',command=root.destroy).grid(row=1, column=1) 

tk.Button(root, text='Graph 1', command=doNothing).grid(row=3, column=0) 
tk.Button(root, text='Graph 2', command=doNothing).grid(row=3, column=1) 
tk.Button(root, text='Graph 3', command=doNothing).grid(row=3, column=2) 
tk.Button(root, text='Graph 4', command=doNothing).grid(row=3, column=3) 



def doNothing(): 
    print("nothing") 

def create_window(): 
    window = tk.Tk()  


menu = Menu(root) 
root.config(menu=menu) 
subMenu = Menu(menu) 
menu.add_cascade(label="File",menu=subMenu) 
subMenu.add_command(label="New", command=create_window) 
subMenu.add_command(label="Open", command=doNothing) 
subMenu.add_command(label="Restart", command=doNothing) 
subMenu.add_command(label="Exit", command=doNothing) 
editMenu = Menu(menu) 
menu.add_cascade(label = "Help", menu=editMenu) 
editMenu.add_command(label="Help", command=doNothing) 



root.mainloop() 

Hier ist der Code ich für 1 meiner Graphen geschrieben haben

import matplotlib.pyplot as plt; plt.rcdefaults() 
import numpy as np 
import matplotlib.pyplot as plt 
import pandas as pd 

df = pd.read_csv('csv.data') 

# Indicated your x values and y values. 
x = df["X Data"] 
y1 = df["Y1 Data"] 
y2 = df["Y2 Data"] 
z = df["Y3 Data"] 
y_pos = np.arange(len(x)) 


lns1 = plt.bar(y_pos,z) 
plt.ylabel('Bar Graph') 
plt.xlabel('Date') 


plt.twinx() 
lns2 = plt.plot(y_pos,y1,'r-',linewidth=2.5) 
lns3 = plt.plot(y_pos,y2,color='orange',linewidth=2.5) 
plt.ylabel('Line Data') 
plt.xticks(y_pos, x) 
plt.xlabel('X axis') 
plt.title('Graph 1') 

plt.legend([lns1, lns2[0], lns3[0]],["Bar", "Line 1", "Line 2"], loc="upper right") 

plt.draw() 
plt.show() 

Antwort

0

Hier ist eine Möglichkeit, es zu tun (Sie hat nicht gesagt, Sie das Diagramm im tkinter Fenster angezeigt werden soll, damit ich übernehmen die Grafik wird in einem separaten Fenster angezeigt matplotlib):

  1. Zuerst für die Graphen in Funktionen den Code eingeben, damit Sie sie anrufen können, wenn Sie wollen. Ich legte den bereitgestellten Code in eine Funktion namens display_graph, die die Datei csv als Argument verwendet. Ich habe dann dieses Modul als graph1.py gespeichert. Hier

ist der graph1.py Code:

import matplotlib.pyplot as plt; plt.rcdefaults() 
import numpy as np 
import matplotlib.pyplot as plt 
import pandas as pd 

# Put the code in a function so you cal call it later 
def display_graph(data): 
    df = pd.read_csv(data) 

    # Indicated your x values and y values. 
    x = df["X Data"] 
    y1 = df["Y1 Data"] 
    y2 = df["Y2 Data"] 
    z = df["Y3 Data"] 
    y_pos = np.arange(len(x)) 

    lns1 = plt.bar(y_pos,z) 
    plt.ylabel('Bar Graph') 
    plt.xlabel('Date') 

    plt.twinx() 
    lns2 = plt.plot(y_pos,y1,'r-',linewidth=2.5) 
    lns3 = plt.plot(y_pos,y2,color='orange',linewidth=2.5) 
    plt.ylabel('Line Data') 
    plt.xticks(y_pos, x) 
    plt.xlabel('X axis') 
    plt.title('Graph 1') 

    plt.legend([lns1, lns2[0], lns3[0]],["Bar", "Line 1", "Line 2"], loc="upper right") 

    plt.draw() 
    plt.show() 

#display_graph('data.csv') 
  1. Dann importieren Sie die graph1.py Modul in die tkinter gui-Datei mit import graph1
  2. eine Funktion definieren, für die Schaltfläche Befehl. Ich definierte graph_1 und rief display_graph von graph1 Modul in es.
  3. Schließlich habe ich den Befehl für die Schaltfläche "Graph 1" auf graph_1 geändert. Hier

ist der Code für die tkinter gui:

Hinweis: ich Python bin mit 2.7 also habe ich einige der Import-Anweisungen, müssen Sie sie in die Python zurück zu ändern 3 Äquivalent.

#import Tkinter as tk 
#from tkFileDialog import askopenfilename 
#from Tkinter import * 
import tkinter as tk 
from tkinter.filedialog import askopenfilename 
from tkinter import * 
import pandas as pd 
import subprocess 
import webbrowser 
import sys 

import graph1 # import the graph1 module 

def import_csv_data(): 
    global v 
    csv_file_path = askopenfilename() 
    print(csv_file_path) 
    v.set(csv_file_path) 
    df = pd.read_csv(csv_file_path) 

# Define the functions before calling them 
def doNothing(): 
    print("nothing") 

def create_window(): 
    window = tk.Tk() 

# Define a function for 'Graph 1' button. This just calls the 'display_graph' function from 
# the 'graph1' module. 
## You could avoid defining this function and use lambda and graph1.display_graph(v.get()) 
## in the 'Graph 1' button command but I prefer it this way. 
def graph_1(): 
    graph1.display_graph(v.get()) 


root = tk.Tk() 
tk.Label(root, text='File Path').grid(row=0, column=0) 
v = tk.StringVar() 
entry = tk.Entry(root, textvariable=v).grid(row=0, column=1) 
tk.Button(root, text='Browse Data Set',command=import_csv_data).grid(row=1, column=0) 
tk.Button(root, text='Close',command=root.destroy).grid(row=1, column=1) 

tk.Button(root, text='Graph 1', command=graph_1).grid(row=3, column=0) # Call the graph_1 function 
tk.Button(root, text='Graph 2', command=doNothing).grid(row=3, column=1) 
tk.Button(root, text='Graph 3', command=doNothing).grid(row=3, column=2) 
tk.Button(root, text='Graph 4', command=doNothing).grid(row=3, column=3) 


menu = Menu(root) 
root.config(menu=menu) 
subMenu = Menu(menu) 
menu.add_cascade(label="File",menu=subMenu) 
subMenu.add_command(label="New", command=create_window) 
subMenu.add_command(label="Open", command=doNothing) 
subMenu.add_command(label="Restart", command=doNothing) 
subMenu.add_command(label="Exit", command=doNothing) 
editMenu = Menu(menu) 
menu.add_cascade(label = "Help", menu=editMenu) 
editMenu.add_command(label="Help", command=doNothing) 

root.mainloop() 

Dies ist die Ausgabe, wenn ich das gui Skript ausführen, für eine CSV-Datei suchen, und klicken Sie auf die Schaltfläche 'Grafik 1':

CSV-Beispieldatei

X Data,Y1 Data,Y2 Data,Y3 Data 
0,5,15,100 
2,6,30,125 
4,4,20,122 
6,10,45,128 
8,15,10,79 
10,14,10,84 
13,20,12,99 
14,6,13,56 
16,4,18,67 
18,8,25,83 
20,9,12,91 

Tkinter gui

enter image description here

Matplotlib Graph

enter image description here

+0

Ich kann Ihnen gar nicht genug danken! Das funktioniert wunderbar! –