code: def _calculate_menu_wh(self):
          
          w = iw = 50
          h = ih = 0
          # menu.index returns None if there are no choices
          index = self._menu.index(tk.END)
          index = index if index is not None else 0
          count = index + 1
  
          # First calculate using the font paramters of root menu:
          font = self._menu.cget('font')
          font = self._get_font(font)
          for i in range(0, count):
              mtype = self._menu.type(i)
              if mtype == 'tearoff':
                  continue
              label = 'default'
              ifont = 'TkMenuFont'
              if mtype != 'separator':
                  label = self._menu.entrycget(i, 'label')
                  ifont = self._menu.entrycget(i, 'font')
              wpx = font.measure(label)
              hpx = font.metrics('linespace')
              w += wpx
              if hpx > h:
                  h = hpx * 2
              # Calculate using font configured for each subitem
              ifont = self._get_font(ifont)
              wpx = ifont.measure(label)
              hpx = ifont.metrics('linespace')
              iw += wpx
              if hpx > ih:
                  ih = hpx * 2
          # Then compare 2 sizes and use the greatest
          w = max(w, iw, 100)
          h = max(h, ih, 25)
          self._cwidth = w + int(w * 0.25)
          self._cheight = h + int(h * 0.25)
docs: Calculate menu widht and height.