Hjälp behövs med python-programmering!

Permalänk
Medlem

Hjälp behövs med python-programmering!

Nu behöver jag hjälp med mitt projektarbete igen, jag skapar ett program där det ska finnas "knappar", som man kan trycka på, och när man gör det så ska ett värde antingen ökas eller minskas.

Jag har skrivit kod så att man i kommandoprompten får information om vart muspekaren befinner sig, och vart i fönstret man klickar:

event = pygame.event.poll() if event.type == pygame.MOUSEMOTION: print "mouse at (%d, %d)" % event.pos if event.type == pygame.MOUSEBUTTONDOWN and event.button == LEFT: print "Pressed at (%d, %d)" % event.pos for evt in pygame.event.get(): if evt.type == pygame.MOUSEBUTTONDOWN: print evt

Det är väl en enkel if-sats man ska göra, men det står alldeles still i huvudet.

Ifrån den koden, hur får man ut x och y värdena som fristående variabler som man sen kan sätta in i if-satsen?

Typ en sådan här if-sats kanske man ska ha?

if posx > 520 & posx < 600 & posy > 30 & posy < 55:

Om det är svårt att förstå mina förklaringar så förstår jag er, men jag tror det ska gå att förstå vad jag vill ha sagt. :S

Visa signatur

|| Intel 8700K || MSI GTX 1080 TI Gaming X || Xonar DG || Samsung 750 EVO 500GB & Kingston A2000 1TB & Samsung 960 EVO 250GB || XFX XXX 650W || Antec P183 || Asus G-Sync RoG Swift PG279Q || Dell XPS 15 || Thinkpad X220

The Force is like Duct Tape, it has a light side, a dark side, and holds the universe together.

Permalänk
Medlem

Re: Hjälp behövs med python-programmering!

Citat:

Ursprungligen inskrivet av Newklear
Ifrån den koden, hur får man ut x och y värdena som fristående variabler som man sen kan sätta in i if-satsen?

pos är väl en 2-tupel, vilket innebär att du antingen få ut enskilda värden genom

x = event.pos[0] y = event.pos[1]

Eller (mycket snyggare):

x, y = event.pos

Permalänk
Medlem

Det verkar inte vilja fungera :/

for event in pygame.event.get(): if event.type == pygame.MOUSEBUTTONDOWN: print event posx, posy = event.pos if posx > 520 & posx < 600 & posy > 30 & posy < 55: print "bla"

Nu borde den printa både eventen och "bla", men endast eventen printas, alltså måste det ju vara fel på if-satsen eller "posx, posy = event.pos"

När jag sedan stänger ner programmet, får jag felet:

Traceback (most recent call last):
File "***", line 199, in <module>
if __name__ == '__main__': main()
File "***", line 184, in main
posx, posy = event.pos
AttributeError: event member not defined

i kommandoprompten, innan det stängs ner.

Om jag däremot använder mig av den första koden du skrev, så startar inte programmet över huvudtaget, utan får "AttributeError: event member not defined".

Visa signatur

|| Intel 8700K || MSI GTX 1080 TI Gaming X || Xonar DG || Samsung 750 EVO 500GB & Kingston A2000 1TB & Samsung 960 EVO 250GB || XFX XXX 650W || Antec P183 || Asus G-Sync RoG Swift PG279Q || Dell XPS 15 || Thinkpad X220

The Force is like Duct Tape, it has a light side, a dark side, and holds the universe together.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Newklear
Nu borde den printa både eventen och "bla", men endast eventen printas, alltså måste det ju vara fel på if-satsen eller "posx, posy = event.pos"

När jag sedan stänger ner programmet, får jag felet:

Traceback (most recent call last):
File "***", line 199, in <module>
if __name__ == '__main__': main()
File "***", line 184, in main
posx, posy = event.pos
AttributeError: event member not defined

i kommandoprompten, innan det stängs ner.

Två fel som jag ser:

1) Du försöker hämta ut event.pos oberoende av event.type. Jag vet inte hur pygame fungerar, men antar att event.pos endast är definierat vid vissa typer. När du får ett close-event (eller något annat som inte är musrelaterat) blir det därför fel.

2) När du jämför positioner använder du &. Du vill antingen använda && eller det mer Python-idiomatiska and.

if x == 1 and y == 2: do_stuff()

Visa signatur

Vill du ha svar? Citera mig gärna.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av lajnold

1) Du försöker hämta ut event.pos oberoende av event.type. Jag vet inte hur pygame fungerar, men antar att event.pos endast är definierat vid vissa typer. När du får ett close-event (eller något annat som inte är musrelaterat) blir det därför fel.

Med risk för att låta tjatig, hur gör man då för att lösa fel #1?

Trodde att det bara var att göra som ovanstående person sa.

Visa signatur

|| Intel 8700K || MSI GTX 1080 TI Gaming X || Xonar DG || Samsung 750 EVO 500GB & Kingston A2000 1TB & Samsung 960 EVO 250GB || XFX XXX 650W || Antec P183 || Asus G-Sync RoG Swift PG279Q || Dell XPS 15 || Thinkpad X220

The Force is like Duct Tape, it has a light side, a dark side, and holds the universe together.

Permalänk
Medlem

Kort svar: du har inte lagt "event.pos" och efterföljande rader inom din första ifsats (som du borde gjort)

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Micket
Kort svar: du har inte lagt "event.pos" och efterföljande rader inom din första ifsats (som du borde gjort)

Tack, nu löste det sig!

Visa signatur

|| Intel 8700K || MSI GTX 1080 TI Gaming X || Xonar DG || Samsung 750 EVO 500GB & Kingston A2000 1TB & Samsung 960 EVO 250GB || XFX XXX 650W || Antec P183 || Asus G-Sync RoG Swift PG279Q || Dell XPS 15 || Thinkpad X220

The Force is like Duct Tape, it has a light side, a dark side, and holds the universe together.