การเลือกไฟล์ใน Python ด้วย Dialog ง่ายๆ


129

ฉันต้องการรับเส้นทางไฟล์เป็นอินพุตในแอปพลิเคชันคอนโซล Python ของฉัน

ขณะนี้ฉันสามารถขอเส้นทางแบบเต็มเป็นอินพุตในคอนโซลเท่านั้น

มีวิธีทริกเกอร์อินเทอร์เฟซผู้ใช้แบบง่ายๆที่ผู้ใช้สามารถเลือกไฟล์แทนการพิมพ์เส้นทางแบบเต็มได้หรือไม่?

คำตอบ:


213

ใช้ tkinter เป็นอย่างไรบ้าง?

from Tkinter import Tk
from tkinter.filedialog import askopenfilename

Tk().withdraw() # we don't want a full GUI, so keep the root window from appearing
filename = askopenfilename() # show an "Open" dialog box and return the path to the selected file
print(filename)

ทำ!


ฉันได้รับ TypeError: อ็อบเจ็กต์ 'module' ไม่สามารถเรียกใช้บน Tk () ถอน () - มีความคิดใดบ้าง
user391339

1
ฉันต้องทำ root = Tk.Tk () จากนั้น root.withdraw () ตอนนี้หน้าต่างโต้ตอบเปิดไฟล์ไม่ปิดอย่างไรก็ตาม
user391339

20
ใช้ Python 3.x และฉันเชื่อว่า "Tkinter" ควรเป็นตัวพิมพ์เล็กทั้งหมด "tkinter"
WestAce

1
@WestAce ใช่เปลี่ยนจาก "Tkinter" เป็น "tkinter" สำหรับ Python3
Ben

1
มีวิธีใดบ้างที่จะอนุญาตเฉพาะไฟล์บางประเภท? สำหรับเช่น ฉันต้องการให้ผู้ใช้เลือกไฟล์ภาพเท่านั้น
Shantanu Shinde

87

คำตอบของ Etaoin เวอร์ชัน Python 3.x เพื่อความสมบูรณ์:

from tkinter.filedialog import askopenfilename
filename = askopenfilename()

7
สำหรับขนานรวมอาจจะยังมี+import tkinter tkinter.Tk().withdraw()
imallett

4
สิ่งนี้ใช้ไม่ได้สำหรับฉัน (บน Mac, Python 3.6.6) หน้าต่าง GUI เปิดขึ้น แต่คุณไม่สามารถปิดได้และคุณได้รับลูกบอลแห่งความตาย
Ben Vincent

2
เหมือนกันที่นี่ กล่องโต้ตอบไฟล์จะไม่ปิด
Cabara

1
รหัสนี้เหมือนกับคำตอบที่ยอมรับ แต่ไม่สมบูรณ์
eric

บน Mac 10.14.6 นี้เปิดค้นหาแฟ้มแล้วมันก็ล้มเหลวทั้งระบบ :(
Gaya

30

ด้วยEasyGui :

import easygui
print(easygui.fileopenbox())

ติดตั้ง:

pip install easygui

การสาธิต:

import easygui
easygui.egdemo()

4
นี่เป็นทางออกที่ดีที่สุด เหตุผลหลักคือ easygui เป็นแพ็คเกจ pip และติดตั้งง่าย
Yonatan Naor

2
บน Mac OSX 10.14.5, python 3.6.7, easygui 0.98.1 ฉันได้รับความผิดพลาดอย่างมากเมื่อฉันลองสิ่งนี้ ไม่แนะนำ.
Christopher Barber

ทำไมฉันถึงได้รับinvalid syntaxข้อผิดพลาดสำหรับprint easygui.diropenbox()?
Bricktop


1
@ChristopherBarber เหมือนกันกับ 10.14.6. Python ก็หยุดการทำงาน
Gaya

11

ใน Python 2 ใช้tkFileDialogโมดูล

import tkFileDialog

tkFileDialog.askopenfilename()

ใน Python 3 ใช้tkinter.filedialogโมดูล

import tkinter.filedialog

tkinter.filedialog.askopenfilename()

มันไม่ได้เป็นส่วนหนึ่งของการติดตั้งมาตรฐานใน Python 3
miguelmorin

3

ตัวเลือกที่จะต้องพิจารณาก็คือ Zenity: http://freecode.com/projects/zenity

ฉันมีสถานการณ์ที่ฉันกำลังพัฒนาแอปพลิเคชันเซิร์ฟเวอร์ Python (ไม่มีคอมโพเนนต์ GUI) และด้วยเหตุนี้จึงไม่ต้องการแนะนำการพึ่งพาชุดเครื่องมือ python GUI ใด ๆ แต่ฉันต้องการให้สคริปต์ดีบักบางส่วนของฉันถูกกำหนดพารามิเตอร์โดยไฟล์อินพุตและต้องการ แจ้งให้ผู้ใช้เห็นไฟล์หากไม่ได้ระบุไว้ในบรรทัดคำสั่ง Zenity เป็นสิ่งที่ลงตัว เพื่อให้บรรลุสิ่งนี้เรียกใช้ "zenity --file-selection" โดยใช้โมดูลกระบวนการย่อยและจับภาพ stdout แน่นอนว่าโซลูชันนี้ไม่ใช่เฉพาะ Python

Zenity รองรับหลายแพลตฟอร์มและได้ติดตั้งไว้แล้วบนเซิร์ฟเวอร์ dev ของเราดังนั้นจึงอำนวยความสะดวกในการดีบัก / การพัฒนาของเราโดยไม่ต้องมีการพึ่งพาที่ไม่ต้องการ


0

ฉันได้ผลลัพธ์ที่ดีกว่า wxPython มากกว่า tkinter ตามที่แนะนำในคำตอบนี้สำหรับคำถามที่ซ้ำกันในภายหลัง:

https://stackoverflow.com/a/9319832

เวอร์ชัน wxPython สร้างกล่องโต้ตอบไฟล์ที่ดูเหมือนกับกล่องโต้ตอบเปิดไฟล์จากแอปพลิเคชันอื่น ๆ บนการติดตั้ง OpenSUSE Tumbleweed ของฉันกับเดสก์ท็อป xfce ในขณะที่ tkinter สร้างสิ่งที่แคบและอ่านยากด้วยอินเทอร์เฟซการเลื่อนด้านข้างที่ไม่คุ้นเคย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.