2016-05-12 9 views
0

Ich habe ein GUI-Programm eingerichtet, um ein passendes Spiel zu spielen.Versuchen, das GUI-Programm zu erkennen, wenn ein bestimmter Bereich angeklickt wird? [Python]

In meinem Programm habe ich zwei Tasten, die gut funktionieren, weil ich eine Button-Klasse habe, um zu erkennen, dass eine Schaltfläche erstellt und wenn geklickt wird. für den angeklickten Teil habe ich das in meinem Code:

def isClicked(self, p): 
     """Returns true if button active and Point p is inside""" 
     if self.active == True and p.getX() <= self.xmax and p.getX() >= self.xmin and \ 
      p.getY() >= self.ymin and p.getY() <= self.ymax: 
      return True 
     else: 
      return False 

Dies funktioniert jedoch nur mit Tasten. Ich habe in meinem Programm ein 6x4 Kartenset auf dem Bildschirm. Ich klicke auf das Start-Spiel und die Karten erscheinen, aber das Programm stürzt sofort ab, nachdem ich das Spiel gestartet habe und die Karten erscheinen, weil es sagt Das macht Sinn, da mein Programm für Buttons eingerichtet ist. Wie kann ich es bekommen, damit mein Programm registriert wird, wenn ein Benutzer auf etwas klickt, das keine Schaltfläche ist?

Mit anderen Worten: Ich möchte, dass der Benutzer auf eine Karte klickt und diese Karte dann eine andere Karte erstellt. Aber nicht sicher, wie es zu erhalten, klicken Sie auf, wohin er will, und haben es funktionieren, wenn sie auf einer tatsächlichen Karte angeklickt

for firstcard in range(6): 
      firstrow = self.deck.dealCard() 
      randomsuite = firstrow.getSuite() 
      randomrank = firstrow.getRank() 
      #Real image with face value of card 
      realCard = Image(Point(xpos,ypos),"playingcards/"+ (randomsuite) + str(randomrank) +".gif") 
      realCard.draw(win) 
      #Red Back of card to cover image 
      firstcard = Image(Point(xpos,ypos),"playingcards/b1fv.gif") 
      firstcard.draw(win) 
      #pushes the card to the right a bit 
      xpos += 100 



while not Quitbutton.isClicked(p): 
     #Start Game 
     if StartGameButton.isClicked(p) and player == True: 

      if first == True: 
       Game.gameboard(win,150,125) 
       if firstcard.isClicked(p): 
        firstcard.undraw() 
       first = False 
+1

poste die relevanten Teile deines Codes – aless80

+0

@ aless80, Ich habe bearbeitet, um den Hauptteil zu zeigen Ich konzentriere mich auf –

+0

Welche GUI-Bibliothek verwenden Sie? –

Antwort

0

Ich gehe davon aus, dass Image eine Klasse ist, können Sie nicht direkt ändern.
In diesem Fall können Sie es erweitern, um eine anklickbare Bild, mit dem folgenden: anstelle der Image Klasse

def ImageEx(Image): 
    def __init__(location, graphic): 
     super().__init__(location, graphic) 

    def isClicked(self, p): 
     # insert the click detection code here 

einfach dann diese Klasse verwenden:

 #Real image with face value of card 
     realCard = ImageEx(Point(xpos,ypos),"playingcards/"+ (randomsuite) + str(randomrank) +".gif") 
     realCard.draw(win) 
     #Red Back of card to cover image 
     firstcard = ImageEx(Point(xpos,ypos),"playingcards/b1fv.gif") 

Dies gibt Ihnen eine interaktive Bild mit einer isClicked Methode.

Es könnte sich sogar lohnen, eine interaktive Objektklasse zu haben, die alle Ihre interaktiven Objekte erben können, um ihnen die Möglichkeit zu geben, manipuliert zu werden.

+0

Ich hatte nie eine Image-Klasse, nur gerade hart codierte Realcard = Bild (Punkt (xpos, ypos), "Spielkarte") Also fügte ich hinzu, was Sie geschrieben haben, aber wenn ich das hinzufügen, sagte es eine Menge von mir Code funktioniert nicht, und wenn ich ihn lösche, kann ich immer noch die Karten auf meinem Spiel erscheinen lassen, aber immer noch kein Klicken. Ich bin mir also nicht sicher, wie ich den Code, den du geschrieben hast, implementieren kannst –

Verwandte Themen