Configuring a button (or any widget) in Tkinter is done by calling a configure method "config"
To change the size of a button called button1 you simple call
button1.config( height = WHATEVER, width = WHATEVER2 )
If you know what size you want at initialization these options can be added to the constructor.
button1 = Button(self, text = "Send", command = self.response1, height = 100, width = 100)
Answer from cdbitesky on Stack OverflowConfiguring a button (or any widget) in Tkinter is done by calling a configure method "config"
To change the size of a button called button1 you simple call
button1.config( height = WHATEVER, width = WHATEVER2 )
If you know what size you want at initialization these options can be added to the constructor.
button1 = Button(self, text = "Send", command = self.response1, height = 100, width = 100)
I've always used .place() for my tkinter widgets.
place syntax
You can specify the size of it just by changing the keyword arguments!
Of course, you will have to call .place() again if you want to change it.
Works in python 3.8.2, if you're wondering.
I tried to do it with padx and pady by setting them to the same value, not square.
I tried to do it with width and height parameters also setting them to the same value, it's still not square.
I am stuck, does anyone know why these methods are not working and which ones do?
Videos
Regarding your initial question: the button does appear physically. The problem is, since it is so large, it is hard to distinguish from the rest of the window.
Now, you said that your ultimate goal is to change the size of a button. If so, then you are on the right track: you use the height and width options for this.
However, I would recommend that you make a few changes to your code:
- Don't make the button so huge. Even on a very big monitor, having a button be that size is way overkill.
- Don't make the window so huge. Nobody wants an application that takes up the entire screen.
- Use
.gridinstead of.place. Doing so will make it easier for you to place widgets where you want them. - Set the
heightandwidthoptions when you make the button, not after it. - There is no need to import
syshere. Only import what you need. - Don't import like this:
from tkinter import *. Doing so dumps a whole bunch of names in the global namespace that can easily be overwritten.
Here is my version of your script:
import tkinter as tk
def mmWindow():
mmWindow = tk.Tk()
mmWindow.geometry('600x600')
mWindow = tk.Tk()
# You can set any size you want
mWindow.geometry('500x500+0+0')
mWindow.title('DMX512 Controller')
wtitle = tk.Label(mWindow, text="Pi DMX", fg='blue')
wtitle.grid(row=0, column=1)
# You can set any height and width you want
mmbutton = tk.Button(mWindow, height=5, width=20, text="Main Menu", command=mmWindow)
mmbutton.grid(row=1, column=1)
mWindow.mainloop()
import sys
from tkinter import *
def update_window_size():
mmWindow.geometry('600x600')
mmWindow = Tk()
mmWindow .geometry('1920x1080+0+0')
mmWindow .title('DMX512 Controller')
wtitle = Label(mmWindow, text="Pi DMX", fg='blue')
wtitle.place(relx=0.33, rely=0.0925925)
mmbutton = Button(mmWindow, text="Main Menu", command=update_window_size)
mmbutton.place(relw=0.104167, relh=0.185185, relx=0.104167, rely=0.185185)
mmWindow.mainloop()
I know this is late, but just want to add my method of how to solve the issue of how to make the button size change. I believe using place with relw and relh will be a better way to go. relw and relh & relx and rely will be fraction of the height and width of the parent widget. Therefore you do not need to worry about adjusting the size of both the wtitle and mmbutton.
If you want to change it's width and height from place then just put the code below on button command.
def update_button_size():
mmbutton.place(width=20, height=20)
mmbutton = Button(mmWindow, text="Main Menu", command=update_button_size)
mmbutton.place(width=400, height=400, relx=0.104167, rely=0.185185)
If you want to change it's width and height from config then use code below.
def update_button_size():
mmbutton.config(width=20, height=20)
mmbutton = Button(mmWindow, text="Main Menu", command=update_button_size)
mmbutton.place(relx=0.104167, rely=0.185185)
mmbutton.config(width=400, height=400)
From my understanding config width and height is different from place width and height.