I spent about a week solving the problem I have in this code but I couldn't do anything. I just give up working due to that line of code. What I need is that: I have a main window with an "oval menu bar" and under the menu-bar, there is a " Add Oval" drop-down menu. when I click the "Add oval" drop-down menu, a pop up window with entry boxes will display.Enter the x & y location (for example 50 &150 and click the send button, the oval should display inside of the left side pyplot. The code below works fine with tkinter window but not working with in the pyplot. How can I create the oval inside the left side of the pyplot? I spent long time to figure out that but I couldn't do anything.I really need any help please.The only problem with the code below is on the App(tk.Tk) class.I really need any help please!! Thank you
Here is the code I tried: from tkinter import * from tkinter import Tk, Frame, Entry, Button, Listbox,StringVar,Label,Menu,filedialog, END from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg import tkinter as tk from matplotlib.figure import Figure import matplotlib.gridspec as gridspec root = tk.Tk() RADIUS = 10 root.title("Oval window") fig = Figure(figsize=(10,10)) gs = gridspec.GridSpec(1, 2) ax1 = fig.add_subplot(gs[0, 0]) ax1.set_xticks([]) ax1.set_xticklabels([]) ax1.set_yticks([]) ax1.set_yticklabels gs = gridspec.GridSpec(2, 2) ax2 = fig.add_subplot(gs[0, 1]) ax2.set_xticks([]) ax2.set_xticklabels([]) ax2.set_yticks([]) ax2.set_yticklabels gs = gridspec.GridSpec(2, 2) ax3 = fig.add_subplot(gs[1, 1]) ax3.set_xticks([]) ax3.set_xticklabels([]) ax3.set_yticks([]) ax3.set_yticklabels canvas = FigureCanvasTkAgg(fig, master=root) canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1) canvas.get_tk_widget().pack() canvas.draw() fig.set_tight_layout({'rect': [0, 0, 0.996, 0.998], 'pad': 0.2, 'h_pad': 0.2}) fig.set_facecolor( 'blue' ) def Remove_entries(): for field in fields: field.Remove(0,END) def enter_values(): nw = Toplevel() nw.title(" Removing Oval") Remove_button = Button(nw, text=" Remove", command=Remove_entries) Remove_button.pack() Button1 = Button(nw, text=" Cancel",command=nw.destroy) Button1.pack() TheListBox = Listbox(nw) # Add a list entry widget TheListBox.pack() for item in ["oval1", "oval2", "oval3", "oval4","SS5","oval6....","ovaln"]: # add four items to the listbox from the main window TheListBox.insert(END, item) ################# class Config9(tk.Toplevel): def __init__(self, master=None, **kwargs): tk.Toplevel.__init__(self, master, **kwargs) btn = tk.Button(self, text='Send',fg="blue", command=self.add) btn.grid(row=8, column=0, sticky=tk.W) btn = tk.Button(self, text='Cancel',fg="red", command=self.destroy) btn.grid(row=8, column=10, sticky=tk.E) lb1 = tk.Label(self, text="Location in (x,y)") lb1.grid(row=2, column=0, columnspan=1, sticky=tk.EW) self.e1 = tk.Entry(self) self.e1.grid(row=2, column=1, columnspan=20, sticky=tk.E) self.e1.focus_set() lbl2 = tk.Label(self, text=" Type") lbl2.grid(row=0, column=0, columnspan=1, sticky=tk.W) self.e2 = tk.Entry(self) self.e2.grid(row=0, column=1, columnspan=20, sticky=tk.E) self.e2.focus_set() lbl3 = tk.Label(self, text="SSN") lbl3.grid(row=1, column=0, columnspan=1, sticky=tk.W) self.e3 = tk.Entry(self) self.e3.grid(row=1, column=1, columnspan=20, sticky=tk.E) self.e3.focus_set() lbl4 = tk.Label(self, text="Oreintation") lbl4.grid(row=3, column=0, columnspan=1, sticky=tk.W) self.e4 = tk.Entry(self) self.e4.grid(row=3, column=1, columnspan=20, sticky=tk.E) self.e4.focus_set() lbl5 = tk.Label(self, text="Constant") lbl5.grid(row=4, column=0, columnspan=1, sticky=tk.W) self.e5 = tk.Entry(self) self.e5.grid(row=4, column=1, columnspan=20, sticky=tk.E) self.e5.focus_set() self.transient(master) # set to be on top of the main window self.grab_set() master.wait_window(self) def add(self): x, y = self.e1.get().split() self.master.place_dot(int(x), int(y)) class App(tk.Tk): def __init__(self): #### Hello, here is the problem!!!! How can I change this window? btn = tk.Button(self, text='Add Oval ',fg="blue", command=self.get_options) btn.grid(row=0, column=0, sticky=tk.W) btn = tk.Button(self, text='Cancel',fg="red", command=self.destroy) btn.grid(row=0, column=1, sticky=tk.E) self.can = tk.Canvas(self, width=400, height=400) self.can.grid(row=1, column=0, columnspan=2) def get_options(self): Config9(self) def place_dot(self, x, y): x1 = x - RADIUS y1 = y - RADIUS x2 = x + RADIUS y2 = y + RADIUS self.can.create_oval(x1, y1, x2, y2,fill='green') def callback9(self,button): if button==" btn": print ("btn") ### menubar = Menu(root) ovalmenu = Menu(menubar) ovalmenu.add_command(label="Add oval", command=Config9) ovalmenu.add_command(label="Remove oval", command=enter_values) menubar.add_cascade(label=" Oval", menu=ovalmenu) root.config(menu=menubar) root.mainloop() win = App() win.mainloop() -- https://mail.python.org/mailman/listinfo/python-list