Skip to main content
 首页 » 编程设计

python之对为什么 PyGame 显示黑屏感到困惑

2025年05月04日18qq78292959

所以在我决定问这个问题之前,我做了一些研究以了解我的问题是什么并遇到了这个问题:Code Only Produces Black Screen In Pygame Window但是,这并不是那么有用,因为我没有遇到与此人相同的问题。我肯定知道我的 PyGame 没有过时或类似的东西,因为我的代码以前版本可以正常工作。

每次运行代码时,我都会遇到黑屏。

这是我的代码(有点长抱歉):

import pygame 
import sys 
from pygame.locals import * 
 
white = (255,255,255) 
black = (0,0,0) 
 
objs = [] 
 
MAIN_BUTTON = 1 
 
class Pane(): 
 
    def __init__(self): 
        self.Screen = pygame.display.set_mode((1000,600), 0, 32) 
        self.font = pygame.font.SysFont('Arial', 25) 
 
    def drawPane(self, textToDisplay): 
        self.Screen.blit(self.font.render(textToDisplay, True, (black)), (250, 115)) 
        pygame.draw.rect(self.Screen, (black), (175, 75, 200, 100), 2) 
 
    def drawPane1(self, textToDisplay): 
        self.Screen.blit(self.font.render(textToDisplay, True, (black)), (250, 115)) 
        pygame.draw.rect(self.Screen, (black), (175, 75, 200, 100), 2) 
 
    def drawPane2(self, textToDisplay): 
        self.Screen.blit(self.font.render(textToDisplay, True, (black)), (250, 115)) 
        pygame.draw.rect(self.Screen, (black), (175, 75, 200, 100), 2) 
 
    def drawPane3(self, textToDisplay): 
        self.Screen.blit(self.font.render(textToDisplay, True, (black)), (250, 115)) 
        pygame.draw.rect(self.Screen, (black), (175, 75, 200, 100), 2) 
 
    def drawPane4(self, textToDisplay): 
        self.Screen.blit(self.font.render(textToDisplay, True, (black)), (250, 115)) 
        pygame.draw.rect(self.Screen, (black), (175, 75, 200, 100), 2) 
 
    def drawPane5(self, textToDisplay): 
        self.Screen.blit(self.font.render(textToDisplay, True, (black)), (250, 115)) 
        pygame.draw.rect(self.Screen, (black), (175, 75, 200, 100), 2) 
 
    def drawPane6(self, textToDisplay): 
        self.Screen.blit(self.font.render(textToDisplay, True, (black)), (250, 115)) 
        pygame.draw.rect(self.Screen, (black), (175, 75, 200, 100), 2) 
 
    def drawPane7(self, textToDisplay): 
        self.Screen.blit(self.font.render(textToDisplay, True, (black)), (250, 115)) 
        pygame.draw.rect(self.Screen, (black), (175, 75, 200, 100), 2) 
 
    def drawPane8(self, textToDisplay): 
        self.Screen.blit(self.font.render(textToDisplay, True, (black)), (250, 115)) 
        pygame.draw.rect(self.Screen, (black), (175, 75, 200, 100), 2) 
 
    def drawPane9(self, textToDisplay): 
        self.Screen.blit(self.font.render(textToDisplay, True, (black)), (250, 115)) 
        pygame.draw.rect(self.Screen, (black), (175, 75, 200, 100), 2) 
 
class Screen(): 
 
    def __init__(self): 
        pygame.init() 
        self.font = pygame.font.SysFont('Arial', 25) 
        pygame.display.set_caption('Box Test') 
        self.screen = pygame.display.set_mode((1000,600), 0, 32) 
        self.screen.fill((white)) 
        pygame.display.update() 
        numberOfPanes = 0 
        self.NoOfPanes = numberOfPanes 
 
    def addPane(self, textToDisplay): 
        myPane = Pane() 
        myPane.drawPane(textToDisplay) 
 
    def clearScreen(self): 
        self.screen = pygame.display.set_mode((600,400), 0, 32) 
        self.screen.fill((white)) 
        pygame.display.update() 
 
    def mousePosition(self): 
        global clickPos 
        global releasePos 
        for event in pygame.event.get(): 
            if event.type == MAIN_BUTTON: 
                self.Pos = pygame.mouse.get_pos() 
                return MAIN_BUTTON 
            else: 
                return False 
 
 
if __name__ == '__main__': 
    Pan3 = Screen() 
    Pan3.addPane("hello") 
    Pan3.mousePosition() 
    pygame.display.update() 
    while True: 
        ev = pygame.event.get() 
        for event in ev: 
            if event.type == pygame.MOUSEBUTTONUP: 
                posx,posy = pygame.mouse.get_pos() 
                print(posx) 
                print(posy) 
 
 
        for event in pygame.event.get():         
            if event.type == pygame.QUIT: 
                pygame.quit(); sys.exit(); 

所以我基本上是在尝试在 **class Screen()** 中显示来自 **class Pane()** 的 Pane (现在是一个)但是就像我之前说的那样,当我运行代码时出现黑屏。但出于某种原因,鼠标坐标跟踪器仍然有效。非常感谢任何帮助。

请您参考如下方法:

问题出在您的代码组织上。

你有树时间 pygame.display.set_mode()。每次调用 pygame.display.set_mode() 时,您都会破坏之前的 screen,创建新的 screen 并且新屏幕始终为黑色。

您应该只创建一次screen并将其作为参数发送给其他类。

def addPane(self, textToDisplay): 
    myPane = Pane(self.screen) # send screen to Pane 
    myPane.drawPane(textToDisplay) 
 
# ... 
 
class Pane(): 
 
    def __init__(self, screen): 
        self.Screen = screen # get screen  

并从 clear() 函数中删除 pygame.display.set_mode() - 在程序结束时使用一个屏幕。

现在我可以看到带有“你好”的 Pane