Python Forum
Canvas not placing inside Grid - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: GUI (https://python-forum.io/forum-10.html)
+--- Thread: Canvas not placing inside Grid (/thread-6420.html)



Canvas not placing inside Grid - leonv - Nov-21-2017

I am trying to build a fairly simple GUI that will allow me to use GPIO pins on a Raspberry PI 3. I am using grid to place the labels, buttons and indicators on the gui. I want the indicators to look like LEDs. I'm trying to use canvas (and Oval) to create the indicators. I can't get the Canvas items to appear inside the grid. It places them outside (as if creating a new grid).
Here's the code snippet:

from tkinter import *
import time
import RPi.GPIO as GPIO

LedPin1 = 11    # pin11
LedPin2 = 12    # pin12
Switch1 = 15
Switch2 = 16

class Application(Frame):
    """MyeVault BU Box Controller"""
    def __init__(self, master):
        super(Application, self).__init__(master)
        self.grid()
        self.create_widgets()

    def create_widgets(self):
        """Create widgets"""
        Label(self, text="Actions").grid(row = 0, column = 0)
        self.canvasPwr=Canvas(root, width=20, height=20, background='yellow')
        self.canvasPwr.grid(row=2,column=1)
        canvasLED=Canvas(root, width=20, height=20, background='green')
        canvasLED.grid(row=4,column=1)
        Label(self, text="Status").grid(row=0, column = 1)
        PowerLED = Label(self, text="Power LED", bg ="yellow")
        PowerLED.grid(row=1, column = 1)
        Label(self, text="HDD Activity").grid(row=3, column = 1)
        
        self.button_reset = Button(self)
        self.button_reset["text"] = "Reset"
        #self.button_reset (bg ="white")
        self.button_reset["command"] = self.Reset
        self.button_reset.grid(row = 1, column = 0)

        self.button_tapPower = Button(self)
        self.button_tapPower["text"]= "Tap Power Button"
        self.button_tapPower["command"]= self.tapPower
        self.button_tapPower.grid(row = 2, column = 0)

        self.button_holdPower = Button(self)
        self.button_holdPower["text"]= "Hold Power Button"
        self.button_holdPower["command"]= self.holdPower
        self.button_holdPower.grid(row = 3, column = 0)
    
and here's the result:
[Image: gui.JPG]

Much Appreciation for assistance!
Leon


RE: Canvas not placing inside Grid - Larz60+ - Nov-21-2017

The first thing you do when you instantiate your class is create a frame.
When you create your canvas, you use root as the parent. Change that to self
which is the frame. The root window is underneath the frame, and not visible.


RE: Canvas not placing inside Grid - leonv - Nov-21-2017

That's it. Thank you so much!