2017-09-26 38 views
0

私は、次のコードを持っています。これは基本的に、フォルダのアプリケーションとそのサブフォルダからすべての画像を取得します。私の問題は、同じことをするためにすべての画像にクリックイベントを追加しようとしていることです。基本的には「exec("apps/" + apps[app_count] + "/app.py")」どのようにpygameの中の画像のクリックイベントを追加するには?

# -*- coding: utf-8 -*- 
from pygame import * 
import os 
import pygame 
import time 
import random 
import sys 

_image_library = {} 

class SeedOS(): 

    def home(self): 
     (width, height) = (240, 320) 
     screen = pygame.display.set_mode((width, height)) 
     pygame.display.set_caption('Seed OS') 
     pygame.font.init() 
     Font30 = pygame.font.SysFont('Arial', 30) 
     WHITE = (255,255,255) 
     BLACK = (0,0,0) 
     screen.fill(WHITE) 
     apps = os.walk("apps").next()[1] 
     app_count = 0 
     icon_width = 15 
     icon_height = 0 
     max_width = 155 
     pygame.display.flip() 
     while True: 
      while app_count < len(apps): 
       print apps[app_count] 
       image = pygame.image.load("apps/" + apps[app_count] + "/app.png").convert() 
       screen.blit(image, (icon_width, icon_height)) 
       icon_width+=70 
       if icon_width > max_width: 
        icon_width = 15 
        icon_height +=70 
       app_count += 1 
      time2 = time.strftime('%H:%M:%S') 
      pygame.display.flip() 
      pygame.draw.rect(screen,BLACK,(0,290,240,30)) 
      clock = Font30.render(time2, False, WHITE) 
      screen.blit(clock,(60,288)) 
      for event in pygame.event.get(): 
       if event.type == pygame.QUIT: 
        pygame.quit() 
        sys.quit() 

phone = SeedOS() 
phone.home() 

これはフォルダ「アプリケーション」で物事のすべてをチェックするコードの一部です

while app_count < len(apps): 
        print apps[app_count] 
        image = pygame.image.load("apps/" + apps[app_count] + "/app.png").convert() 
        screen.blit(image, (icon_width, icon_height)) 
        icon_width+=70 
        if icon_width > max_width: 
         icon_width = 15 
         icon_height +=70 
        app_count += 1 

と各フォルダからすべての画像を追加します。 「app.png」と「app.py」:私はすべてのアイコンをクリックの上、それは2つのファイルが存在しているすべてのアプリケーションのフォルダのように「app.py」だ実行します。

答えて

0

あなたはappsリスト内のすべての画像の座標を追加しpygame.mouse.get_pos()方法でこれらの座標を使用することができます。

while True: 
      while app_count < len(apps): 
       print apps[app_count] 
       apps[app_count] = (apps[app_count], icon_width, icon_height) # Adding coordinates to the list 
       image = pygame.image.load("apps/" + apps[app_count][0] + "/app.png").convert() # Adding an index to find the image in the tuple 
       screen.blit(image, (icon_width, icon_height)) 
       icon_width+=70 
       if icon_width > max_width: 
        icon_width = 15 
        icon_height +=70 
       app_count += 1 
      time2 = time.strftime('%H:%M:%S') 
      pygame.display.flip() 
      pygame.draw.rect(screen,BLACK,(0,290,240,30)) 
      clock = Font30.render(time2, False, WHITE) 
      screen.blit(clock,(60,288)) 
      for event in pygame.event.get(): 
       if event.type == pygame.QUIT: 
        pygame.quit() 
        sys.quit() 
       if event.type == pygame.MOUSEBUTTONDOWN: 
        if event.button == 1: # MOUSEBUTTONLEFT 
         for a in apps: 
          if a[1] < pygame.mouse.get_pos()[0] < a[1]+IMAGEWIDTH and a[2] < pygame.mouse.get_pos()[1] < a[2] + IMAGEHEIGHT: 
           # Instruction to launch ("apps/" + a[0] + "/app.py") 

あなたがしなければならないのは、定義することで、幅とあなたのアイコンからの高さ(あなたはそれがすべてのアプリケーションのために同じではない場合pygame.Surface.get_size()で何ができるか)、正しい構文で最後の行を交換します。 Windowsでは使用できます。

os.system("apps\\"+a[0]+"\\app.py") # of course you should import os first 
+0

感謝を。それは魅力のように働いた。あなたは私の日を救った:-) –

関連する問題