Чтобы отобразить шейп-файл в tkinter? - PullRequest
1 голос
/ 01 апреля 2019

Я хочу, чтобы «шейп-файл», упомянутый ниже в коде, отображался внутри «sideFrame» окна tkinter. Но теперь шейп-файл открывается в другом окне, которое я не хочу. То есть я хочу отобразить «шейп-файл» внутри правого фрейма окна «tkinter». Я новичок в этом поле, поэтому можно пояснить объяснение вместе с кодом.

import matplotlib
import matplotlib.pyplot as plt
matplotlib.use("TkAgg") # for backend
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure

def forSubmit():
    if MyVar1.get()== 0 or MyVar2.get()==0:
        messagebox.showwarning("Warning", "Select input files!")
    fp = r"F:\ISRO\Spatial_Data\grid_jagalur_spatialjoin.shp"
    data = gpd.read_file(fp)
    print (type(data))
    data.head()
    data.plot()
    plt.show(sideFrame)                                                                         

middleFrame = LabelFrame(root,width=800,text="Input data")
middleFrame.grid(row=1, column=0, padx=8, pady=8, sticky=N+S+W+E)
middleFrame.grid_rowconfigure(0, weight=1)
middleFrame.grid_rowconfigure(1, weight=0)
middleFrame.grid_columnconfigure(0, weight=1)
middleFrame.grid_columnconfigure(1, weight=1)      

Button6 = Button(middleFrame, text="View", command=forSubmit)
Button6.grid(row=1, column=1, padx=4, pady=4,sticky=E) 

sideFrame = LabelFrame(root,width=500, bg="powder blue", text="Image")
sideFrame.grid(row=0, column=1, padx=8, pady=8, sticky=N+S+W+E, rowspan=3)
sideFrame.grid_rowconfigure(0, weight=1)
sideFrame.grid_rowconfigure(1, weight=1)
sideFrame.grid_rowconfigure(2, weight=1)
sideFrame.grid_columnconfigure(0, weight=1)
sideFrame.grid_columnconfigure(1, weight=1)

1 Ответ

0 голосов
/ 01 апреля 2019

Вы должны добавить виджет FigureCanvasTkAgg к вашему sideFrame и затем попробовать что-то в следующих строках:

fig, ax = plt.subplots(nrows = 1, ncols = 1)
cavnas_plot = FigureCanvasTkAgg(fig, master = sideFrame)
canvas_plot.draw()
canvas_plot.get_tk_widget.grid(row = 0, column = 0)

Убедитесь, что для sideFrame * 1007 достаточно места* быть видимым в главном окне

...