|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 lzb1001 于 2022-7-9 06:22 编辑
# 设置透明度
import pygame
import sys
from pygame.locals import *
pygame.init()
size = width, height = 640, 480
bg = (0, 0, 0)
clock = pygame.time.Clock()
screen = pygame.display.set_mode(size)
pygame.display.set_caption('FishC Demo')
turtle = pygame.image.load(r'd:\\work\tortoise.png').convert_alpha()
background = pygame.image.load(r'd:\\work\\grass.jpg').convert()
position = turtle.get_rect()
position.center = width // 2, height // 2
print(position, '\n上:', position.top, '\n下:', position.bottom, '\n左:', position.left, '\n右:', position.right, '\n宽度:', position.width, '\n高度:', position.height, '\n中心点:', position.center)
def blit_alpha(
target: pygame.Surface,
source: pygame.Surface,
location: tuple[int, int],
opacity: int
) -> None:
x, y = location[0], location[1]
temp = pygame.Surface((source.get_width(), source.get_height())).convert()
temp.blit(target, (-x, -y))
temp.blit(source, (0, 0))
temp.set_alpha(opacity)
target.blit(temp, location)
while True:
for event in pygame.event.get():
if event.type == QUIT:
sys.exit()
screen.blit(background, (0, 0))
blit_alpha(target=screen, source=turtle, opacity=200, location=position)
pygame.display.flip()
clock.tick(30)
------------------------------------------
Windows 10 专业版 | Python 3.7.6
------------------------------------------
【我的问题】以上代码
---在IDLE中执行后返回错误提示如下:
Traceback (most recent call last):
File "D:\work\p16_5_pg_3_turtle.py", line 51, in <module>
location: tuple[int, int],
TypeError: 'type' object is not subscriptable
---尝试在pycharm中执行,返回错误提示如下:
Traceback (most recent call last):
File "D:/work/p16_5_pg_3_turtle.py", line 51, in <module>
location: tuple[int, int],
TypeError: 'type' object is not subscriptable
libpng warning: iCCP: known incorrect sRGB profile
两个结果相比,后者多了最后一行
但仍不知道哪里错了?是不是因为python版本的问题?
******************************
感谢大神不吝赐教,为新手解疑释惑。
赠人玫瑰,手有余香,好人一生平安!
这个问题严格来说不是TypeError而是版本问题。之前的回答中已经告诉你了,我使用了类型注释,类型注释从Python 3.2就已经引入了,之后也一直在不断变化。使用类型注释最大的好处是可以直接看清楚参数的类型,降低阅读代码难度,省去了猜测参数类型的麻烦。Python的类型注释这个特性非常好的一点是类型注释不是强制的,不是侵入式的,简单来说就是有它没它都可以运行。
解决问题最简单的办法就是删除报错的部分tuple[int, int],注意location后面的冒号也要删除。
如果还想保留这个类型注释就要做一些简单的修改,首先在代码开头写上from typing import Tuple(typing是负责类型标注的标准库,不用下载),然后把出错的部分tuple[int, int]改成Tuple[int, int]
|
|