PyGame mehrere Fenster = mehrere Threads?

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
majinv
User
Beiträge: 42
Registriert: Mittwoch 14. April 2010, 13:21

Sers zusammen,

ich hab gelesen, dass ich um mit pygame mehrere Fenster erstellen zu können, mehrere Threads brauche...
allerdings mag der Compiler nicht das, was ich schreibe...

ich habe eine datei, in der ich mir jeweils eine instanz der anderen beiden klassen mache...

Code: Alles auswählen

import threading

from node import Mic
from node import Mic2
from shared.models import Logger

def startNode():
    logger = Logger.Logger()

    mic = Mic.Mic()
    logger.log("Initscript", "Mic initiated...")
    mic2 = Mic2.Mic2()
    logger.log("Initscript", "Mic2 initiated...")
Die beiden Klassen die ich aufrufe haben jeweils den thread kopf, der vorgeschrieben ist...
und beide erzeugen ein fenster... allerdings, wird das eine vom anderen überschrieben... und ich kann mir nicht erklären, warum das so ist...
kann mir da jemand helfen?

Code: Alles auswählen

class Mic(threading.Thread):

	def __init__(self):
majinv
User
Beiträge: 42
Registriert: Mittwoch 14. April 2010, 13:21

offensichtlich nicht... oder keiner hatte lust ;-)

ich habs anderes gelöst und für die die eine ähnliche methode suchen:

Code: Alles auswählen

	def whileTrue(self):

		...
		
		while self._running:

			...
	
				if self._runningSoundLevel == True:
					self.soundLevel(end_pos)
				if self._runningSoundLevel2 == True:
					self.soundLevel2(start_pos, end_pos, p)

				#Update screen
				pygame.display.flip()

	def soundLevel(self, end_pos):
		...
		
	def soundLevel2(self, start_pos, end_pos, p):
		...
somit werden dann einfach 2 surfaces in einem fenster erschaffen und man braucht keine 2 fenster mehr...
beide werden mit den selben daten versorgt und aktualisiert...
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Dir kann wahrscheinlich niemand helfen, da du keinen relevanten Code zeigst. Das ist alles nur sehr allgemeines Zeugs.

Ich habe aber noch zwei Tips für dich:

Code: Alles auswählen

from node import Mic, Mic2
Und überlege dir mal, warum du das Ergebnis von "self._runningSoundLevel == True" nicht gegen "True" testest und was an deiner Zeile überflüssig ist ;-)

Edit: Und natürlich möchtest du noch einen Blick in PEP8 werfen.

Sebastian
Das Leben ist wie ein Tennisball.
majinv
User
Beiträge: 42
Registriert: Mittwoch 14. April 2010, 13:21

naja gut... was ist denn für dich relevanter code? ;-)
ich will ja nichts spezifisches... sondern eigentlich nur 2 instanzen von pygame erzeugen um 2 fenster zu erhalten...
da braucht ja niemand code... entweder es geht... oder es geht nicht... :-P
aber das ist ja erstmal hinfällig...

was den coding style angeht, da hast du recht... ich hab noch 8 spaces statt 4 ;-)
... ich behaupte einfach mein code sei uralt :P
aber recht hast du dennoch :)

deinen tip mit dem if-statement allerdings verstehe ich nicht...
ohne es getestet zu haben, meinst du das ich '== True' weglassen kann, weils ja eh ein boolean ist?
und warum teste ich es genau nicht gegen True?
rads
User
Beiträge: 153
Registriert: Freitag 26. März 2010, 15:51

@majinv

ich denke er meint das

Code: Alles auswählen

if var==True:
auch durch

Code: Alles auswählen

if var:
ausgedrückt werden kann. Nach meiner kleinen Meinung aber geschmacksache und manche mögen es wenn der vergleich leichter lesbar ist. Oh jetzt fang ich mir wieder Schläge ein :oops:
majinv
User
Beiträge: 42
Registriert: Mittwoch 14. April 2010, 13:21

hmmm aber laut konvention, wird je ein leerzeichen zwischen operanden gesetzt... :)
und das untere hab ich ja selbst angesprochen...
mir scheint aber, dass er auf etwas anderes hinauswollte... für mich liest sich das zumindest so...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Wenn ich mich richtig erinnere kann SDL nicht mehr als ein Fenster, da helfen auch Threads nicht.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten