在pygame中,实现文件拖拽功能,返回完整的文件路径和文件名

这篇具有很好参考价值的文章主要介绍了在pygame中,实现文件拖拽功能,返回完整的文件路径和文件名。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

通过windnd可以在pygame中,实现文件拖拽功能,返回完整的文件路径和文件名,经过测试,拖拽文件正常,代码如下:

代码中使用了pygame,如果没有安装,可以用 

pip install pygame

 进行安装。

代码中使用了windnd,如果没有安装,可以用 

pip install windnd

 进行安装。

程序在python 3.10中测试,拖拽文件正常,但当二次 pygame.display.set_mode() 时,标题会出现乱码,需要高手指点,谢谢!

完整代码如下:

# encoding:utf-8
import pygame
from pygame.locals import *
import windnd  # 实现文件的拖拽功能

class pygame_dragfiles():
    def __init__(self, screen) -> None:
        '''向pygame窗口,实现文件拖拽功能
        在python 3.10测试成功,但有一小问题需要求助解决
        '''
        self.screen = screen
        self.display_w = self.screen.get_width()
        self.display_h = self.screen.get_height()
        self.caption = "实现文件拖拽: 文件窗口Resize后,标题栏会出现乱码 abcdefg1234567890."
        # 编码有('utf-8','utf-7','utf-16','utf-32','gb2312','cp936','gbk','gb18030','ASCII','ISO-8859-1','windows-1252','Big5','Shift_JIS','EUC-JP','EUC-KR','KS_C_5601-1987','JOHAB')
        pygame.display.set_caption(self.caption)
        hwnd = pygame.display.get_wm_info()['window']  # 获取句柄
        windnd.hook_dropfiles(
            hwnd, func=self.dragg)  # 实现文件的拖拽功能 用此后,resize窗口标题会乱码,还没有解决!!!
        self.dragg_files = []
        self.main()

    def dragg(self, files):  # 实现文件的拖拽功能
        self.dragg_files = []
        for item in files:
            self.dragg_files.append(item.decode('gbk'))

    def update(self):
        self.screen.fill(0)
        self.str_to_screen('↑↑↑ 刚进入程序时,以上标题显示是正确的', 30, 10, 20, (255, 55, 55))
        self.str_to_screen('如果缩放窗口,标题就会现出乱码!!! 这个问题需要解决,向高手求助!如果不需要缩放窗口,就不存在此问题啦。', 30, 50, 20,(255, 55, 55))
        self.str_to_screen('产生的根源主要是在pygame中为实现文件的拖拽功能,且要限制窗口最小宽和高', 30, 90,20, (255, 55, 55))
        self.str_to_screen('使用了 windnd.hook_dropfiles() 和 pygame.display.set_mode() 语句', 30,130, 20, (255, 55, 55))
        self.str_to_screen('现在可以从外部拖拽文件到此窗口,实现文件的拖拽功能:', 30, 170, 20,(0, 255, 0))
        for i in range(len(self.dragg_files)):
            self.str_to_screen(f'{self.dragg_files[i]}', 30, 200 + i * 25, 20,(0, 255, 0))

    def str_to_screen(self, string, x, y, fontsize, color):
        cur_font = pygame.font.SysFont('simhei', fontsize)
        textSurf = cur_font.render(string, True, color)
        self.screen.blit(textSurf, (x, y))

    def main(self):
        run = True
        while run:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    run = False
                elif event.type == pygame.KEYDOWN:
                    if event.key == K_ESCAPE:
                        run = False
                elif event.type == pygame.VIDEORESIZE:
                    resizewindow(event.size)
                    self.display_w = self.screen.get_width()
                    self.display_h = self.screen.get_height()
                self.update()
                pygame.display.update()

def resizewindow(screen_w_h=(600, 400)):
    global screen  #,screen_w,screen_h
    screen_w, screen_h = screen_w_h
    if screen_w < 600:  #限止最小宽度
        screen_w = 600
    if screen_h < 400:  #限止最小高度
        screen_h = 400
    screen = pygame.display.set_mode((screen_w, screen_h),RESIZABLE)  # 如果这一句不执行,标题也不会产生乱码

if __name__ == '__main__':
    pygame.init()
    screen = pygame.display.set_mode((1100, 400), RESIZABLE)  #.convert_alpha()
    pygame_dragfiles(screen)
    pygame.quit()

操作过程:程序运行后,从文件夹拖拽文件至窗口:

python拖拽获取文件路径,pygame,python,开发语言

拖拽后显示: python拖拽获取文件路径,pygame,python,开发语言

需要解决的问题:

 python拖拽获取文件路径,pygame,python,开发语言

标题不出现乱码的方法:不重复执行 pygame.display.set_mode() 即可文章来源地址https://www.toymoban.com/news/detail-616941.html

到了这里,关于在pygame中,实现文件拖拽功能,返回完整的文件路径和文件名的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包