Python Forum
[PyGame] text-to-screen help
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[PyGame] text-to-screen help
#9
Here a very simple example without cursor. Tinker around with both and make your own.
import pygame

class Textbox(object):
    def __init__(self, rect, font):
        self.text = ""
        self.font = font
        self.rect = rect
        self.image = None
        self.adjust = font.size("Iy") # use for centering
        self.height = rect.y + rect.h - (self.adjust[1] + rect.h) / 2

        self.box_image = pygame.Surface(rect.size)
        self.box_image.fill((100,100,150))

        self.text_color = (255,255,255)

        self.selected = False

    def keydown(self, event):
        if self.selected:
            if 32 <= event.key < 123:
                self.text += str(event.unicode)
            elif event.key == pygame.K_BACKSPACE:
                if len(self.text) > 1:
                    self.text = self.text[:-1]
                else:
                    self.text = ""
            elif event.key == pygame.K_DELETE:
                self.text = ""

            self.build()

    def mouse_button_down(self, event):
        if event.button == 1:
            if self.rect.collidepoint(event.pos):
                self.selected = True
                self.box_image.fill((100,150,100))
            else:
                self.selected = False
                self.box_image.fill((100,100,150))

    # have it fit inside box
    def build(self):
        length = len(self.text)
        if length == 0:
            self.image = None
        else:
            minus = self.adjust[0]
            for n in xrange(length):
                if self.font.size(self.text[n:])[0] < self.rect.w - minus:
                    self.image = self.font.render(self.text[n:], 1, self.text_color)
                    break

    def blit(self, surface):
        surface.blit(self.box_image, self.rect.topleft)
        if self.image:
            surface.blit(self.image, (self.rect.x + self.adjust[0] / 2, self.height))


def main():
    pygame.init()

    pygame.display.set_caption("Textbox Example")
    screen = pygame.display.set_mode((800, 600), 0, 0)
    clock = pygame.time.Clock()

    text = Textbox(pygame.Rect(10,10,150,35), pygame.font.SysFont("arial", 24))
    text2 = Textbox(pygame.Rect(10,60,150,35), pygame.font.Font(None, 30))

    running = True
    while(running):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
            elif event.type == pygame.KEYDOWN:
                text.keydown(event)
                text2.keydown(event)
            elif event.type == pygame.MOUSEBUTTONDOWN:
                text.mouse_button_down(event)
                text2.mouse_button_down(event)

        screen.fill((25,100,150))

        text.blit(screen)
        text2.blit(screen)

        pygame.display.flip()
        clock.tick(60)

    pygame.quit()

main()
99 percent of computer problems exists between chair and keyboard.
Reply


Messages In This Thread
text-to-screen help - by Zman350x - Jan-11-2017, 09:47 PM
RE: text-to-screen help - by ichabod801 - Jan-11-2017, 09:49 PM
RE: text-to-screen help - by Zman350x - Jan-11-2017, 09:53 PM
RE: text-to-screen help - by metulburr - Jan-11-2017, 10:04 PM
RE: text-to-screen help - by Zman350x - Jan-12-2017, 09:04 PM
RE: text-to-screen help - by metulburr - Jan-12-2017, 09:52 PM
RE: text-to-screen help - by Zman350x - Jan-12-2017, 10:29 PM
RE: text-to-screen help - by metulburr - Jan-12-2017, 10:42 PM
RE: text-to-screen help - by Windspar - Jan-12-2017, 11:41 PM
RE: text-to-screen help - by Zman350x - Jan-13-2017, 12:27 AM

Possibly Related Threads…
Thread Author Replies Views Last Post
  [PyGame] When I hit the space bar from the home screen, it sends me to the game over screen JesusisKing 1 1,012 Apr-30-2023, 10:11 PM
Last Post: deanhystad

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020