Ad

How To Print Text In Two Separate Windows With Canvas In It?

- 1 answer

I want to print the text AAAAAAA in one window and BBBBBBB in another one but how do I do that using canvas?

from tkinter import*

root = Tk()
canvas = Canvas(root)

canvas.pack(fill=BOTH, expand=1) # Stretch canvas to root window size.

root.wm_geometry("794x370")
root.title('Map')

def toplevel():
    top = Toplevel()
    top.title('Optimized Map')
    top.wm_geometry("794x370")
    optimized_canvas = Canvas(top)
    optimized_canvas.pack(fill=BOTH, expand=1)


toplevel()

l0 = Label(canvas, text="AAAAAAA", font= "calibri 32 bold",bg="white" )
canvas.create_window(0,70, window=l0, anchor=NW)

l1 = Label(canvas, text="BBBBBBB", font= "calibri 32 bold",bg="white" )
canvas.create_window(0,70, window=l1, anchor=NW)

root.mainloop()
Ad

Answer

Use optimized_canvas with second label

import tkinter as tk

# ---

root = tk.Tk()

canvas = tk.Canvas(root)
canvas.pack(fill='both', expand=True)

l0 = tk.Label(canvas, text="AAAAAAA")
canvas.create_window(0, 70, window=l0, anchor='nw')

# ---

top = tk.Toplevel(root)

optimized_canvas = tk.Canvas(top)
optimized_canvas.pack(fill='both', expand=True)

l1 = tk.Label(optimized_canvas, text="BBBBBBB")
optimized_canvas.create_window(0, 70, window=l1, anchor='nw')

# ---

root.mainloop()

If you create canvas in function then it is assigned to local variable and you have to return it and assign to external/global variable to use it.

import tkinter as tk

# --- functions ---

def create_top(root):

    top = tk.Toplevel(root)

    local_canvas = tk.Canvas(top)
    local_canvas.pack(fill='both', expand=True)

    return local_canvas

# ---

root = tk.Tk()

canvas = tk.Canvas(root)
canvas.pack(fill='both', expand=True)

l0 = tk.Label(canvas, text="AAAAAAA")
canvas.create_window(0, 70, window=l0, anchor='nw')

# ---

optimized_canvas = create_top(root)

l1 = tk.Label(optimized_canvas, text="BBBBBBB")
optimized_canvas.create_window(0, 70, window=l1, anchor='nw')

# ---

root.mainloop()
Ad
source: stackoverflow.com
Ad