Knöpfe und Text erscheinen nicht auf selbem Fenster

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Benutzer_Simon
User
Beiträge: 5
Registriert: Montag 20. April 2020, 16:41

Hallo,
ich habe ein Problem und zwar versuche ich zur Zeit ein kleines Spiel zu machen bei dem am Anfang ein Text auf dem Fenster erscheint unter dem 3 Knöpfe stehen. Den Code für die Knöpfe und den Text habe ich schon, nur schaffe ich es nicht, beides auf einem Fenster erscheinen zu lassen.
Der Code dafür:

Code: Alles auswählen

import pygame
import time
import sys

pygame.init()
pygame.display.set_caption('Test')
size = [800, 600]
screen = pygame.display.set_mode(size)

def draw_text(text):
    font = pygame.font.SysFont("arial", 35)
    y_pos = 75
    x_pos = 250
    for line in text.splitlines():
        for pos in range(1, len(line)+1):
            text = font.render(line[:pos], 1, (255, 255, 255))
            screen.blit(text, (x_pos, y_pos))
            pygame.display.update()
            time.sleep(0.1)
        y_pos += 35
draw_text('Ein Text\n mit\n mehreren Zeilen')
time.sleep(3)
pygame.MOUSEBUTTONDOWN

def button(bx,by,width,height,color_normal,color_aktiv, text= 'd'):
	if mouse[0] > bx and mouse[0] < bx+width and mouse[1] > by and mouse[1] < by+height:
		pygame.draw.rect(screen, color_aktiv, (bx,by,width,height))
	else:
		pygame.draw.rect(screen, color_normal, (bx,by,width,height))

def button_():
    button(80, 375, 160, 60, (250, 250, 250), (250, 0, 0))  # rot
    button(315, 375, 160, 60, (250, 250, 250), (250, 0, 0))  # blau
    button(550, 375, 160, 60, (250, 250, 250), (250, 0, 0))  # grün

#Loop
game = True
while game:
    draw_text()
    button()

    #close window
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()

    mouse = pygame.mouse.get_pos()
    button(80, 375, 160, 60, (250, 250, 250), (250, 0, 0))  # rot
    button(315, 375, 160, 60, (250, 250, 250), (250, 0, 0))  # blau
    button(550, 375, 160, 60, (250, 250, 250), (250, 0, 0))  # grün
    pygame.display.flip()
    pygame.display.update()

Könnte mir jemand verraten, was ich machen muss damit das besagte Problem gelöst wird?

Außerdem würde ich gerne noch wissen ob es möglich ist pro Knopfdruck ein Wort aus der untenstehenden Liste zufällig auszuwählen und dieses dann als Text auf dem Fenster anzuzeigen.

Code: Alles auswählen

import random
tiere = ['Schaf','Kuh','Hase','Elefant']
r_tiere = random.choice(tiere)
Vielen Dank im vorraus
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Das ist doch genau die gleiche Frage die Du schon mal hier gestellt hast: viewtopic.php?f=4&t=48417

Ich hatte dort nichts dazu geschrieben weil der Quelltext insgesamt zu unübersichtlich ist und auch gar nicht durchläuft weil der in eine Ausnahme läuft die ziemlich offensichtlich ist.

Auf Modulebene gehört nur Code der Konstanten, Funktionen, und Klassen definiert. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst, und nicht zwischen Funktionsdefinitionen verteilt.

Funktionen und Methoden erhalten alles was sie ausser Konstanten benötigen als Argument(e) übergeben.

Ich würde mich bei Pygame auf eine Hauptschleife beschränken wo die Anzeige aktualisiert wird und auch Mausbewegungen über die Ereignisschleife verarbeiten und nicht über `pygame.mouse.get_pos()`.

Pygame bietet eine superpraktische `Rect`-Klasse mit der man nicht Position und Ausdehnung als vier einzelne Werte behandeln muss und die auch Methoden zum Testen ob beispielsweise ein Punkt innerhalb des Rechtecks liegt, bietet.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten