2016-06-06 6 views
0

Ich machte ein Programm in Python mit Pygame, so dass, wenn Sie eine Taste auf dem Bildschirm drücken, es einen Befehl ausführt. Ich mache das durch eine Definition, aber ich kann den Befehl nicht benutzen. Hier ist mein Code (btw verwende ich Python 2.7.11)Befehle durch definieren

from time import sleep 
import pygame 
from pygame.locals import * 

white = (255, 255, 255) 
red = (255,0,0) 
black = (0,0,0) 
green = (0,255,0) 
blue = (0,0,255) 
yellow = (135,135,0)#(kinda green) 
pygame.init() 
screen = pygame.display.set_mode((300,200)) 
pygame.display.set_caption('Testing') 
running = True 
def msg(): 
    print (20) 

def button(posX,posY,length,width,color,color2,color3,command): 
    a = (0,0) 
    b = (posX,posY) 
    c = (posX+length,posY+width) 

    while 1: 
     sleep (0.001) 
     for event in pygame.event.get(): 
     screen.fill(white) 

     if event.type == QUIT: 
      running = False 
     if event.type == KEYDOWN and event.key == K_ESCAPE: 
      running = False 
     a = pygame.mouse.get_pos() 


     if (a >= b) & (a <= c): 
      if (event.type == MOUSEBUTTONDOWN): 
       pygame.draw.rect(screen, color3, [posX, posY,length,width]) 
       pygame.display.flip() 
       command 

      else: 
       pygame.draw.rect(screen, color2, [posX, posY,length,width]) 
       pygame.display.flip() 
     else: 

      pygame.draw.rect(screen, color, [posX, posY,length,width]) 
      pygame.display.flip() 

    pygame.display.quit() 

button(60,60,100,100,red,black,green,msg()) 

Wie Sie sehen können, ich rufe andere von der variablen Befehl definieren, die ich laufen, wenn ich auf die Schaltfläche klicken. Wenn ich das starte und auf die Schaltfläche klicke, gibt es keine Fehler, nichts passiert. Kann mir bitte jemand sagen, wie man das richtig macht? Ich habe überall auf Google gesucht, aber ich habe nichts verwandt.

Antwort

0

Wenn Sie msg() in der Argumentliste zu setzen button, ich ist nicht die Funktion als Argument übergeben, aber es sofort und Weitergabe des Rückgabewertes (None in diesem Fall) als Argument aufgerufen wird. Lassen Sie sich von den Klammern los und Sie werden einen Verweis auf die Funktion werden übergeben:

button(60,60,100,100,red,black,green,msg) 

Jetzt müssen Sie nur reparieren Aufruf des Befehls aus dem Inneren der button Funktion. Anstatt es nur zu benennen, command, rufen Sie es durch Hinzufügen der Klammern am Ende:

 if (event.type == MOUSEBUTTONDOWN): 
      pygame.draw.rect(screen, color3, [posX, posY,length,width]) 
      pygame.display.flip() 
      command() 
+0

Vielen Dank! Es klappt! – malteasy

+0

@AryanMisra, vergessen Sie nicht, Antworten als "akzeptiert" (das Häkchen) zu markieren, wenn Sie sie hilfreich fanden. –

Verwandte Themen