Hi, Anyone have any ideas for this issue? i hope I got the messages in the right thread...
Thanks... On Tue, Jan 4, 2011 at 8:25 AM, Cristina Ionescu <[email protected]>wrote: > Hi Luke, > > Thanks for the quick response, it's true I should know better for giving > details... Here's a simplified code that respects the way I implemented the > game and how it's used. The precise issue is that the escape key has no > effect and closing the game window kills everything, app main window and > all... I'm going to look more at why the Escape key isn't interpreted, I > haven't looked into it closely.. > Hope this is more helpful and thanks again: > > > import sys > > from PyQt4.QtCore import * > from PyQt4.QtGui import * > > import pygame > from pygame.locals import * > > #a thread called elsewhere due to other reasons > class mythread(QThread): > > def __init__(self, game_owner, parent=None): > super(mythread, self).__init__(parent) > > self.halted = False > self.mutex = QMutex() > self.game_owner = game_owner > > def initialize(self): > self.halted = False > > def run(self): > self.upd_game() > > def upd_game(self): > while not self.halted: > #restart game if over and replay is enabled > if (self.game_owner.game !=None): > if (not self.game_owner.game.gameover): > self.game_owner.game.run() > #an escape or quit game can happen during a run... > else: > #need to close pygame window only > #try: > # self.game_owner.game.quit() > #except: > # pass > self.game_owner.game = None > > def stop(self): > try: > self.mutex.lock() > self.halted = True > finally: > self.mutex.unlock() > > ##Game - counts Up and DOwn keys pressed > class mygame: > > def __init__(self): > #game variables and flags > self.nb_up = 0 > self.nb_down = 0 > self.gameover = False > self.replay = True > > #Clock > self.clock = pygame.time.Clock() > > #Display configuration > self.screen = pygame.display.set_mode((200,200)) > pygame.display.set_caption("Have fun with my bogus game!") > > #background entity > self.background = pygame.Surface(self.screen.get_size()) > self.background = self.background.convert() > self.background.fill((0,0,0)) > > #Score board label > pygame.font.init() > text = "Up: "+ str(self.nb_up) + " vs. Down: " + > str(self.nb_down) > self.lbl_font = pygame.font.SysFont("Comic Sans MS", 12) > self.label = self.lbl_font.render(text, 1, (200,200,200)) > > ##Update score label > def upd_score(self): > text = "Up: "+ str(self.nb_up) + " vs. Down: " + > str(self.nb_down) > self.label = self.lbl_font.render(text, 1, (200,200,200)) > > ##Interpret pressed key > def interpret_key(self): > #get pressed key > keystate = pygame.key.get_pressed() > > if keystate[pygame.locals.K_UP]: > self.nb_up += 1 > > if keystate[pygame.locals.K_DOWN]: > self.nb_down += 1 > #player wants to stop game - no effect? > if keystate[pygame.locals.K_ESCAPE]: > return False > > return True > > ##Method called in thread > def run(self): > > #tick the clock > self.clock.tick(30) > > #update key score or exit > if not self.interpret_key(): > self.replay = False > self.gameover = True > return > > #Quit the game > for event in pygame.event.get(): > if event.type == pygame.QUIT: > self.gameover = True > self.replay = False > > #update graphical components > self.screen.blit(self.background, (0,0)) > self.upd_score() > self.screen.blit(self.label, (10,10)) > pygame.display.flip() > > ##quit game > def quit(self): > pygame.quit() > #pygame.display.quit() > > ##main window class > class mainwin(QMainWindow): > > def __init__(self, parent=None): > QMainWindow.__init__(self) > > #Main window settings > self.setWindowTitle("Trying to exit pygame") > self.setMinimumSize(300 , 300) > #self.move(0,0) > > self.winthread = None > self.game = None > > #menu > #Create the Menu Bar > self.menu = self.menuBar() > > #Create the File menu entry in the bar > self.file_menu = self.menu.addMenu('&File') > #Create the File entry actions > self.file_quit = self.file_menu.addAction('&Quit') > self.file_quit.setShortcut(QKeySequence('Ctrl+Q')) > self.connect(self.file_quit, SIGNAL("triggered()"), self.quit) > > #toolbar > self.toolbar = QToolBar(self) > self.toolbar.setObjectName("toolbar") > self.addToolBar(self.toolbar) > > #add menu actions to toolbar > self.toolbar.addAction(self.file_quit) > > #main widget > self.mainWidget = QWidget() > self.setCentralWidget(self.mainWidget) > > layv = QVBoxLayout() > > self.b_startgame = QPushButton('Go!', self.mainWidget) > self.b_startgame.setMaximumWidth(100) > self.connect(self.b_startgame, SIGNAL('clicked()'), > self.start_game) > layv.addWidget(self.b_startgame) > > self.mainWidget.setLayout(layv) > > ##exit app window > def quit(self): > self.close() > > #start game and thread calling its run > def start_game(self): > self.winthread = mythread(self) > self.winthread.start() > self.game = mygame() > > > if __name__ == "__main__": > app = QApplication(sys.argv) > app.setApplicationName('TestPyGame') > > form = mainwin() > form.show() > app.exec_() > > >
