如何用python3提示用户打开文件?

Flu*_*der 4 user-interface pygame file python-3.x

我正在制作一个游戏,我希望用户能够单击一个按钮来打开文件管理器并要求他们打开游戏保存文件。是否有模块/我如何将其放入我的游戏中?如果没有好的 gui 方法,我将如何制作文本输入(不使用终端)?谢谢!

imp*_*dom 6

Pygame 是一个低级库,因此它没有您想要的那种内置对话框。您可以创建这样的,但使用tkinter模块会更快,该模块随 Python 一起分发并提供 TK GUI 库的接口。我建议阅读文档,但这里的函数将弹出一个文件选择对话框,然后返回所选的路径:

\n
def prompt_file():\n    """Create a Tk file dialog and cleanup when finished"""\n    top = tkinter.Tk()\n    top.withdraw()  # hide window\n    file_name = tkinter.filedialog.askopenfilename(parent=top)\n    top.destroy()\n    return file_name\n
Run Code Online (Sandbox Code Playgroud)\n

这是一个包含此功能的小示例,按下Spacebar将弹出对话框:

\n
import tkinter\nimport tkinter.filedialog\nimport pygame\n\nWIDTH = 640\nHEIGHT = 480\nFPS = 30\n\ndef prompt_file():\n    """Create a Tk file dialog and cleanup when finished"""\n    top = tkinter.Tk()\n    top.withdraw()  # hide window\n    file_name = tkinter.filedialog.askopenfilename(parent=top)\n    top.destroy()\n    return file_name\n\npygame.init()\nwindow = pygame.display.set_mode((WIDTH, HEIGHT))\nclock = pygame.time.Clock()\n\nf = "<No File Selected>"\nframes = 0\nrunning = True\nwhile running:\n    for event in pygame.event.get():\n        if event.type == pygame.QUIT:\n            running = False\n        elif event.type == pygame.KEYUP:\n            if event.key == pygame.K_SPACE:\n                f = prompt_file()\n\n    # draw surface - fill background\n    window.fill(pygame.color.Color("grey"))\n    ## update title to show filename\n    pygame.display.set_caption(f"Frames: {frames:10}, File: {f}")\n    # show surface\n    pygame.display.update()\n    # limit frames\n    clock.tick(FPS)\n    frames += 1\npygame.quit()\n
Run Code Online (Sandbox Code Playgroud)\n

注意:这将暂停您的游戏循环,如帧计数器所示,但由于事件正在由窗口管理器处理,这不应该成为问题。\n我\n不确定为什么我需要显式 ,但import tkinter.filedialogAttributeError如果我不这样做,就得到一个。

\n

至于 pygame 中的字符串输入,您可能希望在本机执行此操作,在这种情况下,您将处理KEYUP字母键的事件来构建字符串,并可能在用户按下Enter或您自己绘制的按钮时完成。您可以继续沿着 tk 路径前进,在这种情况下,您将需要使用类似tkinter.simpledialog.askstring(\xe2\x80\xa6) 的内容

\n