将文件拖放到 Pygame 并保存

问题描述 投票:0回答:1

我想知道是否有人知道如何将图像拖放到 pygame 屏幕上,然后将其保存到计算机中的文件中。 例如在 Photoshop 中。 或者至少像这样的浏览按钮:

之后我也想使用该图像。

python file pygame
1个回答
2
投票

Pygame 似乎对拖放事件的支持有限,但可以完成某些任务。

事实证明,将文件拖放到活动的 Pygame 窗口上将生成

pygame.DROPFILE
类型的事件,其中包含单个
file
属性,其中包含文件的绝对路径作为字符串。

因此,简单的操作应该很容易实施。

限制是,当拖动将文件拖放到 pygame 窗口上时,不会生成任何事件:您的程序不会“知道”用户正在携带文件,他们可能只是在双手高举在屏幕上。因此,您的程序无法仅使用 pygame 对热点区域提供任何反馈以放置文件,或在拖动文件时显示代表文件类型的缩略图:您一无所知,甚至不知道对于普通鼠标运动而言,生成一个

pygame.MOUSEMOTION
事件。

发生的情况是,当文件在 pygame 窗口上 released 时,会立即生成 4 个事件:(1) 一个

pygame.MOUSEMOTION
事件,其中包含文件被删除的坐标。
pos
属性照常包含 x、y 位置,并且
rel
参数始终为
(0, 0)
,但此事件与普通 MouseMotion 事件无法区分,除非紧随其后的事件。 (2) 一个没有属性的 pygame.DROPBEGIN 事件 (3) 一个带有
.file
属性的 pygame.DROPFILE 事件 (4) 一个没有属性的 pygame.DROPCOMPLETE 事件

因此,您必须保存 MOUSEMOTION 事件,并且每当您收到“DROPFILE”时,请检查最后收到的 MOUSEMOTION 以确定其位置。

我在交互模式下使用了这个简单的片段来解决所有这些问题:

import pygame

screen = pygame.display.set_mode((640, 480))

def blah():
   for e in pygame.event.get():
       print(e)
   pygame.display.flip()

while True:
   blah()
   pygame.time.delay(100)

© www.soinside.com 2019 - 2024. All rights reserved.