Search code examples
pythontkintertkinter-canvastkinter-layout

Tkinter reshaping canvas doesnt work object oriented


Im still new to Tkinter and I was trying to make a login screen. The functionality is there, however I want my canvas to be 200x300px, however that doesnt seem to work. It returns me with a canvas to just about fit the button and input field. Please help!

import tkinter as tk

class Login_Screen:
def __init__(self, master):
    self.master = master
    self.canvas = tk.Canvas(self.master, width=200, height=300)
    self.frame = tk.Frame(self.canvas)
    self.input_user_log = tk.Entry(self.frame)
    self.button1 = tk.Button(self.frame, text="Log in", width=15, command=self.return_login_info)
    self.input_user_log.pack()
    self.canvas.pack()
    self.button1.pack()
    self.frame.pack()

def return_login_info(self):
    print(self.input_user_log.get())


root = tk.Tk()
app = Login_Screen(root)
root.mainloop()

Solution

  • Use the geometry() method on master.

    
    import tkinter as tk
    
    class Login_Screen:
        def __init__(self, master):
            self.master = master
            self.master.geometry("300x200")
            self.canvas = tk.Canvas(self.master)
            self.frame = tk.Frame(self.canvas)
            self.input_user_log = tk.Entry(self.frame)
            self.button1 = tk.Button(self.frame, text="Log in", width=15, command=self.return_login_info)
            self.input_user_log.pack()
            self.canvas.pack()
            self.button1.pack()
            self.frame.pack()