Python 无法让我的GUI按钮在我的星星上运行

Python 无法让我的GUI按钮在我的星星上运行,python,user-interface,pygame,Python,User Interface,Pygame,我无法让我的pygame GUI按钮在我创建的星表上工作,有人能帮我解决这个问题吗 我的代码 你的问题很模糊,你发布的代码也很混乱 我认为你的问题很可能是你在屏幕上绘制选项文本,然后用你的星域完全覆盖它。 应在screen.blitbackground,0,0之后向下移动选项和光标绘图。 然而,发布的代码还存在许多其他问题: 压痕到处都是。我怀疑这是一个复制粘贴问题,而不是代码中的一个实际错误,但这意味着没有人能够在不首先尝试弄清楚您的意思并自行修复的情况下运行它。 __名称永远不等于“开始菜单

我无法让我的pygame GUI按钮在我创建的星表上工作,有人能帮我解决这个问题吗

我的代码


你的问题很模糊,你发布的代码也很混乱

我认为你的问题很可能是你在屏幕上绘制选项文本,然后用你的星域完全覆盖它。 应在screen.blitbackground,0,0之后向下移动选项和光标绘图。 然而,发布的代码还存在许多其他问题:

压痕到处都是。我怀疑这是一个复制粘贴问题,而不是代码中的一个实际错误,但这意味着没有人能够在不首先尝试弄清楚您的意思并自行修复的情况下运行它。 __名称永远不等于“开始菜单”。这个代码通常是从其他地方调用的吗?很难知道如何正确运行它。 开始菜单接受一个参数,但调用时没有参数。 您可以调用pygame.init,但不能调用pygame.display.set_模式,因此在本例中不会创建任何窗口。如果您假设显示器已经初始化并传入,则不应再次初始化pygame。 您绘制选项3两次,但未绘制选项4。
好的,你的代码是非常错误的,正如。 我对您的代码做了很多更改,包括:

为便于阅读,提供了显示文本和绘制星星的功能。 没有必要移除背景屏幕;屏幕就足够了。 通过按类别划分块使代码更具可读性。 为了可读性进行了许多更改。 我在这上面花了很多时间

但是,仍然 我没有把代码作为函数,或者if\uuuu name\uuuuu==。。。检查 你需要做点什么!正当如果没有,请退出编程

这是代码的重新编译版本,结果证明可读性更好

导入操作系统、系统、随机 导入pygame 永远不要使用来自。。。导入*,即使pygame文档告诉您这样做。 def显示短语、loc、屏幕、颜色:显示文本的func s=font.renderphase,真,彩色 屏幕。布利茨,位置 def draw_starstar:绘制星星 您只需要更改一个像素,所以使用set_at,而不是draw.line 屏幕。设置星号[0],星号[1],255,255,255 星[0]-=1 如果星[0]<0: 星形[0]=屏幕。获取宽度 星形[1]=random.randint0,screen.get\u高度 根据代码的特性将代码分成不同的部分 初始化pygame pygame.init screen=pygame.display.set_mode640480 pygame.display.set_标题“菜单” font=pygame.font.font'freesansbold.ttf',40 clock=pygame.time.clock 定义图像/标记 image=pygame.Surface30,50 image.fill0,0,0 pygame.draw.polygonimage,255255255[0,0,0,50,25,25],5 创建星星列表,使用多行for循环以提高可读性 星星=[] 对于range200中的i: x=random.randint0,screen.get\u width y=random.randint0,screen.get\u高度 星号。附加[x,y] 位置=1 尽管如此: 事件 对于pygame.event.get中的e: 如果e.type==pygame.QUIT: pygame.退出 系统出口 elif e.type==pygame.KEYDOWN: 如果e.key==pygame.K_向下: pos+=1 如果位置>4: 位置=1 elif e.key==pygame.K_UP: 位置-=1 如果位置<1: 位置=4 elif e.key==pygame.K_返回: 如果pos==1: 导入MathVadersReal elif pos==4: pygame.退出 系统出口 屏幕。填充0,0,0 显示文本、图像 显示开始,100100,屏幕,255,255,255 显示配置文件,100200,屏幕,255,255,255 显示指令,100300,屏幕,255,255,255 显示退出,100400,屏幕,255,255,255 屏幕。blitimage,50,位置*100-10 绘画明星 对于星星中的星星: 画星星 pygame.display.flip 时钟滴答作响
这根本不是你在这里发布的表单。1.这个凹口是拧上去的。pygame.display.flip之后的缩进是非法的。这里的标签和空格混合在一起,很难说出它应该是什么。2. __名称永远不会是开始菜单,所以函数不会被调用。3.while循环永远不会终止,因此它之后的所有代码都不能运行。此外,在任何人都可能帮助你之前,你需要更清楚地知道你期望它做什么以及它实际上做了什么。我修正了代码的缩进。是的,他在所有按钮闪烁之后正在屏幕上闪烁背景。因此,它掩盖了一切。
import os,sys,random
import pygame
from pygame.locals import *
pygame.init()



def start_menu(screen):

    font = pygame.font.Font('freesansbold.ttf', 40)
    image = pygame.Surface((50,50))
    image.fill((0,0,0))
    pygame.draw.polygon(image,(255,255,255),[(200,200),(0,50),(25,25)],5)
    pos = 1
    option1 = font.render("BEGIN",True,(255,255,255))
    option2 = font.render("MY PROFILE",True,(255,255,255))
    option3 = font.render("INSTRUCTIONS",True,(255,255,255))
    option4 = font.render("QUIT",True,(255,255,255))

    N = 200
    SCREEN_W, SCREEN_H = (900, 600)
    pygame.init()

    pygame.display.set_caption('Starts Ja')

    background = pygame.Surface(screen.get_size())
    background = background.convert()


    stars = [
        [random.randint(0, SCREEN_W),random.randint(0, SCREEN_H)]
        for x in range(N)
    ]
    clock = pygame.time.Clock()
    while 1:
        for e in pygame.event.get():
            if e.type == QUIT:
                exit()
            elif e.type == KEYDOWN:
                if e.key == K_DOWN:
                    pos += 1
                    if pos > 4: pos = 1
                elif e.key == K_UP:
                    pos -= 1
                    if pos < 1: pos = 4
                elif e.key == K_RETURN:
                    if pos == 1:
                        import MathsvadersReal
                    elif pos == 4:
                        exit()
            clock.tick(22)
            screen.blit(option1,(100,100))
            screen.blit(option2,(200,200))
            screen.blit(option3,(200,300))
            screen.blit(option3,(200,400))
            screen.blit(image,(20,pos*100))
            background.fill((0,0,0))
            for star in stars:
                    pygame.draw.line(background,
                        (255, 255, 255), (star[0], star[1]), (star[0], star[1]))
                    star[0] = star[0] - 1
                    if star[0] < 0:
                        star[0] = SCREEN_W
                        star[1] = random.randint(0, SCREEN_H)
            screen.blit(background, (0,0))
            pygame.display.flip()



if __name__ == '__start_menu__': start_menu()