Creating an oval inside a pyplot in Tkinter window
Tafla Magnaw
haregot21 at gmail.com
Fri Jul 21 13:14:03 EDT 2017
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()
More information about the Python-list
mailing list