Как разместить кнопку просмотра и полностью отобразить изображение в правой части окна? - PullRequest
0 голосов
/ 20 марта 2019

Я хочу создать кнопку просмотра в среднем кадре, т. Е. Рядом с кнопкой сброса.Поэтому, когда вы нажимаете кнопку «просмотр», она должна отображать изображение (шейп-файл, который я указал в коде с использованием геопанд) в правой части кадра.

Пожалуйста, укажите это четко, так какЯ новичок в этой области.

from tkinter import *
from tkinter import filedialog
from tkinter import messagebox

def forButton1():
    if MyVar1.get()==1:
        filename1 = filedialog.askopenfilename(initialdir="C:/DSSAT47/Soil")

        with open(filename1) as f1:
            for i in f1:
                myList1.insert(END, i)

        print(filename1)

def forButton2():
    if MyVar2.get() == 1:
        filename2 = filedialog.askopenfilename(initialdir="C:/DSSAT47/Weather")

        with open(filename2) as f2:
            for i in f2:
                myList1.insert(END, i)

        print(filename2)

def forClear1():
    MyVar1.set(0)
    print("*****x file removed*****")

def forClear2():
    MyVar2.set(0)
    print("*****y file removed*****")

def forReset():
    myList1.delete(0, 'end')

    MyVar1.set(0)
    MyVar2.set(0)

    print("*****All files removed*****")
    print("Select new files:")

def forSubmit():
    if MyVar1.get()== 0 or MyVar2.get()==0:
        messagebox.showwarning("Warning", "Select input files!")

def forButton7():
    if MyVar1.get()==0 and MyVar2.get()==0:
        messagebox.showwarning("Warning", "Select input files!")
    else:
        filename3 = filedialog.askopenfilename(initialdir="F:/ISRO/Python codes")
        with open(filename3) as f3:
            for i in f3:
             myList.insert(END, i)

        print(filename3)

def forExit():
    root.destroy()

root = Tk()
root.title("Spatialization of DSSAT")

root.grid_columnconfigure(0, weight=1)

topFrame = LabelFrame(root, text="Select input file")
topFrame.grid(row=0, column=0, padx=8, pady=8, sticky=N+E+S+W)
topFrame.grid_rowconfigure(0, weight=1)
topFrame.grid_rowconfigure(1, weight=1)
topFrame.grid_columnconfigure(0, weight=1)
topFrame.grid_columnconfigure(1, weight=1)
topFrame.grid_columnconfigure(2, weight=1)

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

bottomFrame = LabelFrame(root, text="Model Output")
bottomFrame.grid(row=2, column=0, padx=8, pady=8, sticky=N+E+S+W)
bottomFrame.grid_rowconfigure(0, weight=1)
bottomFrame.grid_columnconfigure(0, weight=1)

MyVar1 = IntVar()
MyVar2 = IntVar()

MyCheckbutton1 = Checkbutton(topFrame, text="x", variable=MyVar1)
MyCheckbutton1.grid(row=0, column=0, padx=4, pady=4)
Button1 = Button(topFrame, text="Choose xFile", command=forButton1)
Button1.grid(row=0, column=1, padx=4, pady=4)
#Button3 = Button(topFrame, text="Clear", command=forClear1)
#Button3.grid(row=0, column=2, padx=4, pady=4)

MyCheckbutton2 = Checkbutton(topFrame, text="y", variable=MyVar2)
MyCheckbutton2.grid(row=1, column=0, padx=4, pady=4)
Button2 = Button(topFrame, text="Choose yFile", command=forButton2)
Button2.grid(row=1, column=1, padx=4, pady=4)
#Button4 = Button(topFrame, text="Clear", command=forClear2)
#Button4.grid(row=1, column=2, padx=4, pady=4)

innerMiddleFrame = Frame(middleFrame)
innerMiddleFrame.grid(row=0, column=0, columnspan=2, padx=4, pady=4)
innerMiddleFrame.grid_columnconfigure(0, weight=1)
innerMiddleFrame.grid_columnconfigure(1, weight=0)

scrollbar = Scrollbar(innerMiddleFrame)
myList1 = Listbox(innerMiddleFrame, yscrollcommand=scrollbar.set)
myList1.grid(row=0, column=0, sticky=N+E+S+W)
scrollbar.config(command=myList1.yview)
scrollbar.grid(row=0, column=1, sticky=N+E+S+W)

Button5 = Button(middleFrame, text="Reset", command=forReset)
Button5.grid(row=1, column=0, padx=4, pady=4)

#Button6 = Button(middleFrame, text="Submit", command=forSubmit)
#Button6.grid(row=1, column=1, padx=4, pady=4)

innerBottomFrame = Frame(bottomFrame)
innerBottomFrame.grid(row=0, column=0, columnspan=2, padx=4, pady=4)
innerBottomFrame.grid_columnconfigure(0, weight=1)
innerBottomFrame.grid_columnconfigure(1, weight=0)

scrollbar = Scrollbar(innerBottomFrame)
myList = Listbox(innerBottomFrame, yscrollcommand=scrollbar.set)
myList.grid(row=0, column=0, sticky=N+E+S+W)
scrollbar.config(command=myList.yview)
scrollbar.grid(row=0, column=1, sticky=N+E+S+W)

Button7 = Button(bottomFrame, text="Select Output File", command=forButton7)
Button7.grid(row=1, column=0, padx=4, pady=4)

Button8 = Button(bottomFrame, text="Exit", command=forExit)
Button8.grid(row=1, column=1, padx=4, pady=4)


root.geometry("400x590")

import geopandas as gpd
#from geopandas.io.file import read_file
fp = r"F:\ISRO\Spatial_Data\grid_jagalur_spatialjoin.shp"
data = gpd.read_file(fp)
print (type(data))
data.head()
data.plot()
import matplotlib.pyplot as plt
plt.show()

root.mainloop()

1 Ответ

0 голосов
/ 20 марта 2019

Вы можете расположить кнопки рядом друг с другом, создав рамку, которая будет содержать их обоих. Затем просто поместите этот кадр туда, куда вы хотите.

Код в моем примере должен идти сразу после кода для списка:

bottomMiddleFrame = Frame(middleFrame, bg='thistle')
bottomMiddleFrame.grid(row=1, column=0, columnspan=2, padx=4, pady=4)

Button5 = Button(bottomMiddleFrame, text="Reset", command=forReset)
Button5.grid(row=0, column=0, padx=4, pady=4)

Button6 = Button(bottomMiddleFrame, text="View", command=forView)
Button6.grid(row=0, column=2, padx=4, pady=4)

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

Конечно, вам также нужно будет создать функцию обратного вызова.

Что касается геопанд, я никогда не использовал их, поэтому не могу вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...