簡體   English   中英

帶Python Tkinter的MatPlotLib圖

[英]MatPlotLib Plot w/ Python Tkinter

我正在嘗試在與圖像相同的窗口或畫布中顯示BMP圖像的MatPlotLib圖。 該代碼已經可以顯示圖像,並且我已經有了數據圖,但是我很難將圖嵌入到GUI中。 我嘗試引用http://matplotlib.org/examples/user_interfaces/embedding_in_tk2.html,但是我有點沮喪地試圖將其隱含在此代碼中。

理想情況下,我將在圖像下方顯示情節。

這是我的代碼:

import tkinter as tk
from tkinter import *
from tkinter import filedialog
from PIL import Image, ImageTk
from scipy import misc
import os
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure

class Window(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master)

        self.master = master
        self.pos = []
        self.master.title("BMP Image GUI")
        self.pack(fill=BOTH, expand=1)

        self.counter = 0

        menu = Menu(self.master)
        self.master.config(menu=menu)

        # File Bar
        file = Menu(menu)
        file.add_command(label="Open Image 1", command=self.openImage1)
        file.add_command(label="Exit", command=self.client_exit)
        menu.add_cascade(label="File", menu=file)

        self.canvas = tk.Canvas(self)
        self.canvas.pack(fill=tk.BOTH, expand=True)
        self.image = None 
        self.image2 = None  

    def client_exit(self):
        exit()

    def openImage1(self):
        filename = filedialog.askopenfilename(initialdir=os.getcwd(), title="Select BMP File",
                                              filetypes=[("BMP Files", "*.bmp")])
        if not filename:
            return

        # Image 1 Data Graph
        image = misc.imread(filename, flatten=False, mode="RGB")
        sumArray1 = []
        for i in range(0, image.shape[0]-1):
            sumArray1.append(np.sum(image[i]))
        np.asarray(sumArray1)
        fig = plt.figure(figsize=(10,3.75), dpi=96)
        plt.plot(sumArray1)


        # Image 1
        load = Image.open(filename)
        load1 = load.resize((960, 720), Image.ANTIALIAS)
        w, h = load1.size
        width, height = root.winfo_screenmmwidth(), root.winfo_screenheight()

        if self.image is None:
            self.render = ImageTk.PhotoImage(load1)
            self.image = self.canvas.create_image((w / 2, h / 2), image=self.render)
            root.geometry("%dx%d" % (w, height))

root = tk.Tk()
root.geometry("%dx%d" % (300, 300))
root.title("BMP Image GUI")
app = Window(root)
app.pack(fill=tk.BOTH, expand=1)
root.mainloop()

我不知道這是否有效,但創建了第二個畫布作為canvas2 ,它似乎可以完成這項工作。 以前,我在與BMP圖像相同的畫布上工作,並且沒有顯示出來。 也許有一種方法可以僅使用一個畫布來完成。

    if self.image is None:
        self.render = ImageTk.PhotoImage(load1)
        self.image = self.canvas.create_image((w / 2, h / 2), image=self.render)
        root.geometry("%dx%d" % (w, height))
        self.canvas2 = FigureCanvasTkAgg(fig, master=root)
        self.canvas2.show()
        self.canvas2.get_tk_widget().pack(side=tk.BOTTOM, fill=tk.BOTH, expand=0)
        self.canvas2._tkcanvas.pack(side=Tk.TOP, fill=Tk.BOTH, expand=0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM