xyyzzjw 发表于 2023-6-4 13:34:08

按钮封装时,按钮上的文本没显示,显示出不全的二按钮方框。问题出在哪呢。

本帖最后由 xyyzzjw 于 2023-6-4 13:40 编辑

import pygame, random

RED=(205,0,0)
BLUE=(122,103,238)
WHITE=(255,255,255)
GREY=(200,200,200)
ROSE=(255,228,225)
GOLD=(255,215,0)
YELLOW=(238,180,34)
WHEAT=(245,222,179)
FIRE=(178,34,34)
PINK=(255,181,197)
GREEN=(0,205,0)
colors=
color=colors

WIN_WIDTH = 400
WIN_HEIGHT = 600

class Button:
    def __init__(self,window,title,rect,color=WHITE,bg_color=color):
      self.window=window
      self.title=title
      self.rect=rect
      self.color=color
      self.bg_color=bg_color

    def draw(self):
      pygame.draw.rect(self.window,self.bg_color,self.rect)
      text2=font.render(self.title,True,(255,0,0))
      text_x=self.rect+self.rect//2-text2.get_width()//2
      text_y=self.rect+self.rect//2-text2.get_height()//2
      self.window.blit(self.window,(text_x,text_y))







# 1.初始化操作
pygame.init()
# 2.创建游戏窗口
# set_mode(大小)
window = pygame.display.set_mode((WIN_WIDTH, WIN_HEIGHT))
pygame.display.set_caption("封装按钮")
# 设置背景颜色(否则为黑色)
window.fill(WHITE)
# ==============显示静态内容========================
font = pygame.font.SysFont("kaiti", 20)
button=Button(window,"取消",(100,200,70,40))
button.draw()
pygame.display.flip()
while True:
    # ==============游戏帧刷新(显示动态)=================
    # 检测事件
    for event in pygame.event.get():
      # 检测关闭按钮被点击的事件
      if event.type == pygame.QUIT:
            # 退出,要保存好数据哦
            exit()


      pygame.display.update()

isdkz 发表于 2023-6-4 13:38:44

你在定义Button类的 draw 方法时,尝试把按钮背景渲染到游戏窗口上,然后,你试图在上面渲染文字。这里出了问题,你不应该将 self.window 作为 blit 方法的第一个参数,应该是你创建的文本对象,像这样:

self.window.blit(text2,(text_x,text_y))


这就是你为什么看不到按钮上的文本的原因。你试图将窗口自身贴到窗口上,而不是你创建的文本对象。 blit 方法应该有一个图像对象作为第一个参数(在这个情况下,是 text2 对象),和一个坐标元组作为第二个参数。坐标元组决定了图像对象应该在窗口的哪个位置被渲染。

所以,你的Button类中的 draw 方法应该是这样的:

class Button:
    def __init__(self,window,title,rect,color=WHITE,bg_color=color):
      self.window=window
      self.title=title
      self.rect=rect
      self.color=color
      self.bg_color=bg_color

    def draw(self):
      pygame.draw.rect(self.window,self.bg_color,self.rect)
      text2=font.render(self.title,True,(255,0,0))
      text_x=self.rect+self.rect//2-text2.get_width()//2
      text_y=self.rect+self.rect//2-text2.get_height()//2
      self.window.blit(text2,(text_x,text_y))


记住,这个修改需要在你的主游戏循环开始之前就执行,这样,每次窗口更新时, draw 方法都会被正确地调用,按钮的文本就会被正确地显示。

xyyzzjw 发表于 2023-6-4 13:46:35

学习过程中,找bug好辛苦哦。自己就是找不出来。谢谢大佬。

歌者文明清理员 发表于 2023-6-4 13:49:12

xyyzzjw 发表于 2023-6-4 13:46
学习过程中,找bug好辛苦哦。自己就是找不出来。谢谢大佬。

chat2.jinshutuan.com,ChatGpt你值得拥有
页: [1]
查看完整版本: 按钮封装时,按钮上的文本没显示,显示出不全的二按钮方框。问题出在哪呢。