|
20鱼币
我在测试时调用了一个模块里的函数,可是报错说没有这个“属性”,能帮我看看为什么吗?
test.pyimport pygame
import sys
from pygame.locals import *
import button
#button1 = pygame.image.load("NewGame.png")
#button2 = pygame.image.load("LoadGame.png")
#button3 = pygame.image.load("help.png")
#button4 = pygame.image.load("ExitGame.png")
#初始化
RED = (255, 0, 0)
pygame.init()
size = width, height = pygame.display.list_modes()[0][0], pygame.display.list_modes()[0][1]
button.init("NewGame.png", "LoadGame.png", "help.png", "ExitGame.png", p=((size[0] / 2, size[1] /8), \
(size[0] / 2, size[1] /4), (size[0] / 2, size[1] /2.6),\
(size[0] / 2, size[1] /1.9)))
clock = pygame.time.Clock()
pygame.display.set_caption("test")
#创造窗口
screen = pygame.display.set_mode(size, FULLSCREEN | HWSURFACE)
b1_qosition = (size[0] / 2, size[1] /8)
b2_qosition = (size[0] / 2, size[1] /4)
b3_qosition = (size[0] / 2, size[1] /2.6)
b4_qosition = (size[0] / 2, size[1] /1.9)
while True:
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
#绘制图片
#screen.blit(button1, b1_qosition)
#screen.blit(button2, b2_qosition)
#screen.blit(button3, b3_qosition)
#screen.blit(button4, b4_qosition)
button.draw(screen)
pygame.draw.rect(screen, RED, (size[0] / 2, size[1] /8, 375, 114), 10)
pygame.display.flip()
clock.tick(200)
botton.pyimport pygame
#按钮图片及位置设置
#button1 = pygame.image.load("NewGame.png")
#button2 = pygame.image.load("LoadGame.png")
#button3 = pygame.image.load("help.png")
#button4 = pygame.image.load("ExitGame.png")
#b1_qosition = (size[0] / 2, size[1] /8)
#b2_qosition = (size[0] / 2, size[1] /4)
#b3_qosition = (size[0] / 2, size[1] /2.6)
#b4_qosition = (size[0] / 2, size[1] /1.9)
button = []
Button = {}
def init(*image, p):
for i in image:
b = pygame.image.load(i)
button.append(b)
Button[button[image.index(i)]] = p[image.index(i)]
def draw(screen):
for i in Button:
screen.blit(i.key, i.values)
c gv
哈哈,看到你的代码,我想为你理清一下思路,顺便开个玩笑:就像在厨房做饭,发现盐罐子其实是糖罐子,结果炒出来的菜味道有点迷惑。这就是代码没有按照我们预想的方式运行时的感觉吧?
首先,我们来看看你提到的报错问题:“属性”错误(AttributeError)。这个错误通常是因为你在访问一个对象的属性或方法时,这个属性或方法并不存在。
这里有几个地方需要注意和修正:
### 1. `button`模块初始化
在你的 `button.py` 文件中,有一些语法和逻辑上的问题。
# botton.py
import pygame
button = [] # 声明 button 为一个列表
Button = {}
def init(*image, p):
for i in image:
b = pygame.image.load(i)
button.append(b) # 添加到列表中
# 位置也要配对起来存储
for img, pos in zip(button, p):
Button[img] = pos
def draw(screen):
for img, pos in Button.items():
screen.blit(img, pos)
### 2. 在 `test.py` 中调用 `button` 模块
确保在 `test.py` 中正确导入使用了 `button` 模块。
# test.py
import pygame
import sys
from pygame.locals import *
import button # 确保这个导入没问题
# 初始化
RED = (255, 0, 0)
pygame.init()
size = width, height = pygame.display.list_modes()[0]
button.init("NewGame.png", "LoadGame.png", "help.png", "ExitGame.png", p=[(width // 2, height // 8),
(width // 2, height // 4),
(width // 2, height // 2.6),
(width // 2, height // 1.9)])
clock = pygame.time.Clock()
pygame.display.set_caption("test")
# 创造窗口
screen = pygame.display.set_mode(size, FULLSCREEN | HWSURFACE)
while True:
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
# 绘制图片
button.draw(screen)
pygame.draw.rect(screen, RED, (width // 2 - 187, height // 8 - 57, 375, 114), 10)
pygame.display.flip()
clock.tick(200)
### 补充说明
1. **路径问题**:确保你的图片路径正确,如果图片不在当前目录,可能会导致加载失败。
2. **除法问题**:Python 的 `/` 操作符默认返回浮点数,使用 `//` 可以保证返回整数,这对于屏幕坐标很重要。
这样修改后,应该能够解决你提到的问题。如果还有其他疑问,欢迎随时提问!祝你编程愉快,就像吃到自己做的美味菜肴一样开心!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
|
最佳答案
查看完整内容
哈哈,看到你的代码,我想为你理清一下思路,顺便开个玩笑:就像在厨房做饭,发现盐罐子其实是糖罐子,结果炒出来的菜味道有点迷惑。这就是代码没有按照我们预想的方式运行时的感觉吧?
首先,我们来看看你提到的报错问题:“属性”错误(AttributeError)。这个错误通常是因为你在访问一个对象的属性或方法时,这个属性或方法并不存在。
这里有几个地方需要注意和修正:
### 1. `button`模块初始化
在你的 `button.py` ...
|