Python Forum
Class function does not create command button - 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: Class function does not create command button (/thread-29186.html)



Class function does not create command button - Heyjoe - Aug-22-2020

Hello Python Users:

The following code displays a command button "Click here to start". This command button is supposed to run the sa function. The sa function is supposed to display a new frame and command button and also print hello. It prints hello but does not display the command button or frame. Why does the command button not display?

import tkinter as tk
myfont = "Helvitica 30"
mybg = "lightskyblue"


class Main:

    def __init__(self, root):
        self.root = root
        self.root.geometry("500x500")
        self.createfstframe()

    def createfstframe(self):
        fstframe = tk.Frame(root)
        fstframe.pack(padx=100, pady=100)
        self.Hellobn=tk.Button(fstframe,text = "Hello", bg = mybg, font = myfont)
        self.Hellobn.pack(fill = tk.BOTH, expand = 1)
        self.Howyoubn = tk.Button(fstframe, text="How are you? ",bg = mybg ,font = myfont)
        self.Howyoubn.pack(fill = tk.BOTH, expand = 1)
        self.clickherebn = tk.Button(fstframe, text = "Click here to start", bg = "deepskyblue",font = myfont, command = self.sa)
        self.clickherebn.pack(fill = tk.BOTH, expand = 1)
        self.quitbn = tk.Button(fstframe,text = "Quit", font = myfont, bg = "red", command = fstframe.quit)
        self.quitbn.pack(fill = tk.BOTH, expand = 1)


    def sa(self):

        mnframe = tk.Frame(root)
        mnframe.pack(padx=100, pady=100)
        self.mybn = tk.Button(mnframe, text="mybutton", font=myfont, bg="red")
        self.mybn.pack(fill=tk.BOTH, expand=1)
        print("Hello")


root = tk.Tk()
b=Main(root)
root.mainloop()



RE: Class function does not create command button - deanhystad - Aug-22-2020

Why you think there isn't a button? Just because you can't see it? Change root's size to 1000x1000 and try again.


RE: Class function does not create command button - Heyjoe - Aug-22-2020

Changing the geometry to 1000x1000 did work. My next goals was to destroy the first set of buttons. I was able to do this after making a few changes (as seen in the following code) after a bit of trial and error.

import tkinter as tk

myfont = "Helvitica 30"
mybg = "lightskyblue"


class Main:

    def __init__(self, root):
        self.root = root
        self.root.geometry("500x500")
        self.createfstframe()

    def createfstframe(self, bg= "green"):
        self.fstframe = tk.Frame(root)
        self.fstframe.pack(padx=100, pady=100)
        self.Hellobn = tk.Button(self.fstframe, text="Hello", bg=mybg, font=myfont)
        self.Hellobn.pack(fill=tk.BOTH, expand=1)
        self.Howyoubn = tk.Button(self.fstframe, text="How are you? ", bg=mybg, font=myfont)
        self.Howyoubn.pack(fill=tk.BOTH, expand=1)
        self.clickherebn = tk.Button(self.fstframe, text="Click here to start", bg="deepskyblue", font=myfont,
                                     command=self.sa)
        self.clickherebn.pack(fill=tk.BOTH, expand=1)
        self.quitbn = tk.Button(self.fstframe, text="Quit", font=myfont, bg="red", command=self.fstframe.quit)
        self.quitbn.pack(fill=tk.BOTH, expand=1)

    def sa(self):
        self.fstframe.destroy()
        mnframe = tk.Frame(root)
        mnframe.pack(padx=100, pady=100)
        self.mybn = tk.Button(mnframe, text="mybutton", font=myfont, bg="red")
        self.mybn.pack(fill=tk.BOTH, expand=1)
        print("Hello")


root = tk.Tk()
b = Main(root)
root.mainloop()