how to draw transparent rect in pygame









up vote
1
down vote

favorite












Can I draw a rect which is transparent inside, but not the outline? It would be better if I could set the outline's width.



like this










share|improve this question





















  • Do you want to know how to draw only the outline or how to make the outline transparent? To draw an outline you can just pass an int which determines the width as the fourth argument to pygame.draw.rect. The problem is that it looks rather ugly for large widths because there will be gaps at the corners. You could also create your own rect outline function and draw four lines.
    – skrx
    Nov 11 at 9:38















up vote
1
down vote

favorite












Can I draw a rect which is transparent inside, but not the outline? It would be better if I could set the outline's width.



like this










share|improve this question





















  • Do you want to know how to draw only the outline or how to make the outline transparent? To draw an outline you can just pass an int which determines the width as the fourth argument to pygame.draw.rect. The problem is that it looks rather ugly for large widths because there will be gaps at the corners. You could also create your own rect outline function and draw four lines.
    – skrx
    Nov 11 at 9:38













up vote
1
down vote

favorite









up vote
1
down vote

favorite











Can I draw a rect which is transparent inside, but not the outline? It would be better if I could set the outline's width.



like this










share|improve this question













Can I draw a rect which is transparent inside, but not the outline? It would be better if I could set the outline's width.



like this







pygame width transparent rect outline






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 11 at 7:21









jwoojin9

274




274











  • Do you want to know how to draw only the outline or how to make the outline transparent? To draw an outline you can just pass an int which determines the width as the fourth argument to pygame.draw.rect. The problem is that it looks rather ugly for large widths because there will be gaps at the corners. You could also create your own rect outline function and draw four lines.
    – skrx
    Nov 11 at 9:38

















  • Do you want to know how to draw only the outline or how to make the outline transparent? To draw an outline you can just pass an int which determines the width as the fourth argument to pygame.draw.rect. The problem is that it looks rather ugly for large widths because there will be gaps at the corners. You could also create your own rect outline function and draw four lines.
    – skrx
    Nov 11 at 9:38
















Do you want to know how to draw only the outline or how to make the outline transparent? To draw an outline you can just pass an int which determines the width as the fourth argument to pygame.draw.rect. The problem is that it looks rather ugly for large widths because there will be gaps at the corners. You could also create your own rect outline function and draw four lines.
– skrx
Nov 11 at 9:38





Do you want to know how to draw only the outline or how to make the outline transparent? To draw an outline you can just pass an int which determines the width as the fourth argument to pygame.draw.rect. The problem is that it looks rather ugly for large widths because there will be gaps at the corners. You could also create your own rect outline function and draw four lines.
– skrx
Nov 11 at 9:38













1 Answer
1






active

oldest

votes

















up vote
1
down vote



accepted










If you just want to draw the outline of a rect, you can pass an integer as the fourth (the width) argument to pygame.draw.rect:



pygame.draw.rect(screen, (0, 100, 255), (50, 50, 162, 100), 3) # width = 3


The problem with this approach is that the corners won't look sharp and clean and the outline can't be transparent.




You could also use the gfxdraw module to draw several outlines with a for loop:



def draw_rect_outline(surface, rect, color, width=1):
x, y, w, h = rect
width = max(width, 1) # Draw at least one rect.
width = min(min(width, w//2), h//2) # Don't overdraw.

# This draws several smaller outlines inside the first outline. Invert
# the direction if it should grow outwards.
for i in range(width):
pygame.gfxdraw.rectangle(screen, (x+i, y+i, w-i*2, h-i*2), color)

draw_rect_outline(screen, (250, 50, 162, 100), (0, 100, 255, 155), 9)


That also allows you to pass a color with an alpha channel to make the outline transparent.




It would also be possible to create a transparent surface and draw a rect onto it (you can pass a transparent color here as well):



surf = pygame.Surface((162, 100), pygame.SRCALPHA)
pygame.draw.rect(surf, (0, 100, 255, 155), (0, 0, 162, 100), 21)


If you want a filled, transparent rectangle, just fill the complete surface:



surf.fill((0, 100, 255, 155))





share|improve this answer




















    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53246660%2fhow-to-draw-transparent-rect-in-pygame%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    1
    down vote



    accepted










    If you just want to draw the outline of a rect, you can pass an integer as the fourth (the width) argument to pygame.draw.rect:



    pygame.draw.rect(screen, (0, 100, 255), (50, 50, 162, 100), 3) # width = 3


    The problem with this approach is that the corners won't look sharp and clean and the outline can't be transparent.




    You could also use the gfxdraw module to draw several outlines with a for loop:



    def draw_rect_outline(surface, rect, color, width=1):
    x, y, w, h = rect
    width = max(width, 1) # Draw at least one rect.
    width = min(min(width, w//2), h//2) # Don't overdraw.

    # This draws several smaller outlines inside the first outline. Invert
    # the direction if it should grow outwards.
    for i in range(width):
    pygame.gfxdraw.rectangle(screen, (x+i, y+i, w-i*2, h-i*2), color)

    draw_rect_outline(screen, (250, 50, 162, 100), (0, 100, 255, 155), 9)


    That also allows you to pass a color with an alpha channel to make the outline transparent.




    It would also be possible to create a transparent surface and draw a rect onto it (you can pass a transparent color here as well):



    surf = pygame.Surface((162, 100), pygame.SRCALPHA)
    pygame.draw.rect(surf, (0, 100, 255, 155), (0, 0, 162, 100), 21)


    If you want a filled, transparent rectangle, just fill the complete surface:



    surf.fill((0, 100, 255, 155))





    share|improve this answer
























      up vote
      1
      down vote



      accepted










      If you just want to draw the outline of a rect, you can pass an integer as the fourth (the width) argument to pygame.draw.rect:



      pygame.draw.rect(screen, (0, 100, 255), (50, 50, 162, 100), 3) # width = 3


      The problem with this approach is that the corners won't look sharp and clean and the outline can't be transparent.




      You could also use the gfxdraw module to draw several outlines with a for loop:



      def draw_rect_outline(surface, rect, color, width=1):
      x, y, w, h = rect
      width = max(width, 1) # Draw at least one rect.
      width = min(min(width, w//2), h//2) # Don't overdraw.

      # This draws several smaller outlines inside the first outline. Invert
      # the direction if it should grow outwards.
      for i in range(width):
      pygame.gfxdraw.rectangle(screen, (x+i, y+i, w-i*2, h-i*2), color)

      draw_rect_outline(screen, (250, 50, 162, 100), (0, 100, 255, 155), 9)


      That also allows you to pass a color with an alpha channel to make the outline transparent.




      It would also be possible to create a transparent surface and draw a rect onto it (you can pass a transparent color here as well):



      surf = pygame.Surface((162, 100), pygame.SRCALPHA)
      pygame.draw.rect(surf, (0, 100, 255, 155), (0, 0, 162, 100), 21)


      If you want a filled, transparent rectangle, just fill the complete surface:



      surf.fill((0, 100, 255, 155))





      share|improve this answer






















        up vote
        1
        down vote



        accepted







        up vote
        1
        down vote



        accepted






        If you just want to draw the outline of a rect, you can pass an integer as the fourth (the width) argument to pygame.draw.rect:



        pygame.draw.rect(screen, (0, 100, 255), (50, 50, 162, 100), 3) # width = 3


        The problem with this approach is that the corners won't look sharp and clean and the outline can't be transparent.




        You could also use the gfxdraw module to draw several outlines with a for loop:



        def draw_rect_outline(surface, rect, color, width=1):
        x, y, w, h = rect
        width = max(width, 1) # Draw at least one rect.
        width = min(min(width, w//2), h//2) # Don't overdraw.

        # This draws several smaller outlines inside the first outline. Invert
        # the direction if it should grow outwards.
        for i in range(width):
        pygame.gfxdraw.rectangle(screen, (x+i, y+i, w-i*2, h-i*2), color)

        draw_rect_outline(screen, (250, 50, 162, 100), (0, 100, 255, 155), 9)


        That also allows you to pass a color with an alpha channel to make the outline transparent.




        It would also be possible to create a transparent surface and draw a rect onto it (you can pass a transparent color here as well):



        surf = pygame.Surface((162, 100), pygame.SRCALPHA)
        pygame.draw.rect(surf, (0, 100, 255, 155), (0, 0, 162, 100), 21)


        If you want a filled, transparent rectangle, just fill the complete surface:



        surf.fill((0, 100, 255, 155))





        share|improve this answer












        If you just want to draw the outline of a rect, you can pass an integer as the fourth (the width) argument to pygame.draw.rect:



        pygame.draw.rect(screen, (0, 100, 255), (50, 50, 162, 100), 3) # width = 3


        The problem with this approach is that the corners won't look sharp and clean and the outline can't be transparent.




        You could also use the gfxdraw module to draw several outlines with a for loop:



        def draw_rect_outline(surface, rect, color, width=1):
        x, y, w, h = rect
        width = max(width, 1) # Draw at least one rect.
        width = min(min(width, w//2), h//2) # Don't overdraw.

        # This draws several smaller outlines inside the first outline. Invert
        # the direction if it should grow outwards.
        for i in range(width):
        pygame.gfxdraw.rectangle(screen, (x+i, y+i, w-i*2, h-i*2), color)

        draw_rect_outline(screen, (250, 50, 162, 100), (0, 100, 255, 155), 9)


        That also allows you to pass a color with an alpha channel to make the outline transparent.




        It would also be possible to create a transparent surface and draw a rect onto it (you can pass a transparent color here as well):



        surf = pygame.Surface((162, 100), pygame.SRCALPHA)
        pygame.draw.rect(surf, (0, 100, 255, 155), (0, 0, 162, 100), 21)


        If you want a filled, transparent rectangle, just fill the complete surface:



        surf.fill((0, 100, 255, 155))






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 11 at 11:43









        skrx

        14.9k31834




        14.9k31834



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53246660%2fhow-to-draw-transparent-rect-in-pygame%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            這個網誌中的熱門文章

            Barbados

            How to read a connectionString WITH PROVIDER in .NET Core?

            Node.js Script on GitHub Pages or Amazon S3