Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make tkinter button widget take up full width of grid

I've tried this but it didn't help.

I'm making a calculator program. I've made this so far:

from tkinter import *
window = Tk()

disp = Entry(window, state='readonly', readonlybackground="white")
disp.grid(column=0, row=0, columnspan=4)
#row 1
seven = Button(window, text="7", command=Seven)
seven.grid(column=1,row=1)

eight = Button(window, text="8", command=Eight)
eight.grid(column=2,row=1)

nine = Button(window, text="9", command=Nine)
nine.grid(column=3,row=1)

divide = Button(window, text="÷", command=Divide)
divide.grid(column=4,row=1)

#row 2

four = Button(window, text="4", command=Four)
four.grid(column=1,row=2)

five = Button(window, text="5", command=Five)
five.grid(column=2,row=2)

six = Button(window, text="6", command=Six)
six.grid(column=3,row=2)

multiply = Button(window, text="×", command=Multiply)
multiply.grid(column=4,row=2)

#row 3

one = Button(window, text="1", command=One)
one.grid(column=1,row=3)

two = Button(window, text="2", command=Two)
two.grid(column=2,row=3)

three = Button(window, text="3", command=Three)
three.grid(column=3,row=3)

minus = Button(window, text="-", command=Minus)
minus.grid(column=4,row=3)

#row 4

zero = Button(window, text="0", command=Zero)
zero.grid(column=1,row=4)

dec = Button(window, text=".", command=Dec)
dec.grid(column=2,row=4)

equal = Button(window, text="=", command=Equal)
equal.grid(column=3,row=4)

add = Button(window, text="+", command=Add)
add.grid(column=4,row=4)

window.mainloop()

This looks like this:
Calculator with broken buttons

I'd like the boxes to be equally wide and fill the available space. The result should look similar to this:
Calculator with fixed buttons

How do you make a button take up the entire width of the row/column?

like image 537
Henry Avatar asked Apr 03 '17 15:04

Henry


1 Answers

Two things:

  1. You set your entry box to apply from column 0 onwards, but then each subsequent row operates from column 1 onwards. Be consistent in this - your button for 7 should be in column 0, 8 in 1 etc.
  2. When you .grid your buttons, use sticky=N+S+E+W. This will allow the buttons to expand with their respective row and column sizes.

Update: N+S+E+W is not working for python3.6.7 it is neswor any combination of these 4 letters.

For example:

#!/usr/bin/python
# -*- coding: utf-8 -*-

from tkinter import *
window = Tk()

disp = Entry(window, state='readonly', readonlybackground="white")
disp.grid(column=0, row=0, columnspan=4)
#row 1
seven = Button(window, text="7")
seven.grid(column=0,row=1, sticky='nesw')

eight = Button(window, text="8")
eight.grid(column=1,row=1, sticky='nesw')

nine = Button(window, text="9")
nine.grid(column=2,row=1, sticky='nesw')

divide = Button(window, text="÷")
divide.grid(column=3,row=1, sticky='nesw')

window.mainloop()

returns a window that looks like:

Tkinter buttons with sticky

like image 164
asongtoruin Avatar answered Nov 04 '22 10:11

asongtoruin