0

だから私はpygameを使って基本的な天気予報アプリを作っていますが、GUIに問題があります

すべてのコードは正常に動作しますが、ウィンドウが正しく表示されません

コードは次のとおりです。

import ast, sys
import pygame
from pygame.locals import *
import inputbox
import get_info

class Weather():
    def __init__(self):
        self.zip = '99354'
        self.get_info()
        pygame.font.init()
        self.state = 2
        self.font = pygame.font.Font("resources\Sansation_Light.ttf", 16)
        self.font_render()
        self.bg = pygame.image.load('resources/background.png')

        self.refresh = pygame.image.load('resources/button1.png')
        self.refresh_r = self.refresh.get_bounding_rect()
        self.refresh_r.x, self.refresh_r.y = (155,550)
        self.chg_zip = pygame.image.load('resources/button2.png')
        self.chg_zip_r = self.chg_zip.get_bounding_rect()
        self.chg_zip_r.x, self.chg_zip_r.y = (20,135)

        self.main()

    def font_render(self):
        self.current_img = pygame.image.load('resources/%s.png'%self.weather)
        self.cur_temp = self.font.render(self.temp, 0, (255,255,255))
        self.cur_weather = self.font.render(self.weather, 0, (255,255,255))
        self.updated = self.font.render(self.update[0], 0, (255,255,255))
        self.updated2 = self.font.render(self.update[2], 0, (255,255,255))
        self.ref_text = self.font.render("Refresh", 0, (255,255,255))
        self.zip_text = self.font.render("Change Zip", 0, (255,255,255))

    def Draw(self):

        self.screen.blit(self.bg,(0,0))
        self.screen.blit(self.refresh,(155,550))
        self.screen.blit(self.ref_text,(200,560))
        self.screen.blit(self.chg_zip,(20,135))
        self.screen.blit(self.zip_text,(40,140))
        self.screen.blit(self.radar_img,(12,175))
        self.screen.blit(self.updated,(100,500))
        self.screen.blit(self.updated2,(175,525))
        self.screen.blit(self.current_img,(20,20))
        self.screen.blit(self.cur_temp,(150,50))
        self.screen.blit(self.cur_weather,(150,70))

        row = 25
        for i in range(0,5):
            stat_str = str(self.info[0][i][0])+' : '+ str(self.info[0][i][1])
            self.cur_stats = self.font.render(stat_str, 0, (255,255,255))
            self.screen.blit(self.cur_stats,(275,row))
            row+=25

    def button(self):
        if self.refresh_r.collidepoint(pygame.mouse.get_pos()) and pygame.mouse.get_pressed()[0]:
            self.get_info()
        if self.chg_zip_r.collidepoint(pygame.mouse.get_pos()) and pygame.mouse.get_pressed()[0]:
            self.state = 1

    def get_zip(self):
        self.screen.blit(self.bg,(0,0))
        self.zip = inputbox.ask(self.screen,"Zipcode")
        self.__init__()
        self.screen.blit(self.bg,(0,0))
        self.state = 2


    def get_info(self):

        get_info.get_info(self.zip)
        print "done"

        with open('info.txt','r') as info:
            fore_info =  info.read()

        weather = ast.literal_eval(fore_info)
        current = weather[0]
        self.info = weather[1]
        forecast = weather[2]
        self.place = weather[3]
        self.update =  self.place.strip().split('.')
        self.temp = current[0]
        self.weather = current[1]
        self.radar_img = pygame.image.load('radar.jpg')

    def main(self):
        clock = pygame.time.Clock()
        self.screen = pygame.display.set_mode((475,600))
        pygame.display.set_caption('Weather')

        while True:
            clock.tick(45)
            for event in pygame.event.get():
                if event.type == QUIT:
                    sys.exit()
            if self.state == 1:
                self.get_zip()
            else:
                self.Draw()
                self.button()


Weather()

私のコードは非常にずさんで最高ではありませんが、実行するときを除いてまだ機能します。ウィンドウは次のようになります。

パイゲームウィンドウ

別のウィンドウをその上にドラッグするか、最小および最大にするまで、その背後にあるものを表示します

では、ポップアップして適切に表示されるようにコードを変更するにはどうすればよいですか

4

1 に答える 1

0

それはおそらくあなたが決して電話しないからですpygame.display.flip()

于 2013-07-25T01:47:18.910 に答える