Tôi có một tập lệnh đơn giản phân tích tệp và tải nội dung của nó vào cơ sở dữ liệu. Tôi không cần giao diện người dùng, nhưng ngay bây giờ tôi đang nhắc người dùng cho tệp để phân tích cú pháp bằng cách sử dụng
import tkinter as tk
from tkinter import filedialog
root = tk.Tk[]
root.withdraw[]
file_path = filedialog.askopenfilename[]
1, không thân thiện nhất, đặc biệt là vì người dùng không thể sao chép/dán đường dẫn. Tôi muốn một cách nhanh chóng và dễ dàng để trình bày hộp thoại chọn tệp cho người dùng, họ có thể chọn tệp và sau đó nó được tải vào cơ sở dữ liệu. .import tkFileDialog
file_path_string = tkFileDialog.askopenfilename[]
Mã này gần với những gì tôi muốn, nhưng nó để lại một khung trống khó chịu mở [không thể đóng, có lẽ vì tôi chưa đăng ký một trình xử lý sự kiện gần].
Tôi không phải sử dụng tkinter, nhưng vì nó nằm trong thư viện tiêu chuẩn Python, đây là một ứng cử viên tốt cho giải pháp nhanh nhất và dễ nhất.
Một cách nhanh chóng và dễ dàng để nhắc cho một tệp hoặc tên tệp trong tập lệnh mà không có UI khác?
hỏi ngày 16 tháng 2 năm 2012 lúc 21:24Feb 16, 2012 at 21:24
Buttons840Buttons840Buttons840
8.87715 Huy hiệu vàng55 Huy hiệu bạc84 Huy hiệu đồng15 gold badges55 silver badges84 bronze badges
0
Tkinter là cách dễ nhất nếu bạn không muốn có bất kỳ sự phụ thuộc nào khác. Để chỉ hiển thị hộp thoại mà không có bất kỳ phần tử GUI nào khác, bạn phải ẩn cửa sổ gốc bằng phương thức
import tkinter as tk
from tkinter import filedialog
root = tk.Tk[]
root.withdraw[]
file_path = filedialog.askopenfilename[]
2:import tkinter as tk
from tkinter import filedialog
root = tk.Tk[]
root.withdraw[]
file_path = filedialog.askopenfilename[]
Biến thể Python 2:
import Tkinter, tkFileDialog
root = Tkinter.Tk[]
root.withdraw[]
file_path = tkFileDialog.askopenfilename[]
JFS
384K183 Huy hiệu vàng949 Huy hiệu bạc1622 Huy hiệu Đồng183 gold badges949 silver badges1622 bronze badges
Đã trả lời ngày 2 tháng 1 năm 2013 lúc 8:58Jan 2, 2013 at 8:58
TomVoditomvoditomvodi
5.1872 Huy hiệu vàng27 Huy hiệu bạc37 Huy hiệu Đồng2 gold badges27 silver badges37 bronze badges
12
Bạn có thể sử dụng EasyGui:
import easygui
path = easygui.fileopenbox[]
Để cài đặt
import tkinter as tk
from tkinter import filedialog
root = tk.Tk[]
root.withdraw[]
file_path = filedialog.askopenfilename[]
3, bạn có thể sử dụng import tkinter as tk
from tkinter import filedialog
root = tk.Tk[]
root.withdraw[]
file_path = filedialog.askopenfilename[]
4:pip3 install easygui
Đó là một mô -đun Python tinh khiết duy nhất [
import tkinter as tk
from tkinter import filedialog
root = tk.Tk[]
root.withdraw[]
file_path = filedialog.askopenfilename[]
5] sử dụng import tkinter as tk
from tkinter import filedialog
root = tk.Tk[]
root.withdraw[]
file_path = filedialog.askopenfilename[]
6.
nbro
14.4K27 Huy hiệu vàng104 Huy hiệu bạc188 Huy hiệu đồng27 gold badges104 silver badges188 bronze badges
Đã trả lời ngày 16 tháng 2 năm 2012 lúc 21:59Feb 16, 2012 at 21:59
JFSJFSjfs
384K183 Huy hiệu vàng949 Huy hiệu bạc1622 Huy hiệu Đồng183 gold badges949 silver badges1622 bronze badges
6
Đã trả lời ngày 2 tháng 1 năm 2013 lúc 8:58
import wx
def get_path[wildcard]:
app = wx.App[None]
style = wx.FD_OPEN | wx.FD_FILE_MUST_EXIST
dialog = wx.FileDialog[None, 'Open', wildcard=wildcard, style=style]
if dialog.ShowModal[] == wx.ID_OK:
path = dialog.GetPath[]
else:
path = None
dialog.Destroy[]
return path
print get_path['*.txt']
nbro
14.4K27 Huy hiệu vàng104 Huy hiệu bạc188 Huy hiệu đồng27 gold badges104 silver badges188 bronze badges
Đã trả lời ngày 16 tháng 2 năm 2012 lúc 21:59Feb 16, 2012 at 22:07
JFSJFSFogleBird
Hãy thử với wxpython:25 gold badges122 silver badges131 bronze badges
Đã trả lời ngày 16 tháng 2 năm 2012 lúc 22:07
import win32gui, win32con, os
filter='Python Scripts\0*.py;*.pyw;*.pys\0Text files\0*.txt\0'
customfilter='Other file types\0*.*\0'
fname, customfilter, flags=win32gui.GetOpenFileNameW[
InitialDir=os.environ['temp'],
Flags=win32con.OFN_ALLOWMULTISELECT|win32con.OFN_EXPLORER,
File='somefilename', DefExt='py',
Title='GetOpenFileNameW',
Filter=filter,
CustomFilter=customfilter,
FilterIndex=0]
print 'open file names:', repr[fname]
print 'filter used:', repr[customfilter]
print 'Flags:', flags
for k,v in win32con.__dict__.items[]:
if k.startswith['OFN_'] and flags & v:
print '\t'+k
FoglebirdfoglebirdJul 23, 2019 at 14:57
72K25 Huy hiệu vàng122 Huy hiệu bạc131 Huy hiệu ĐồngKevin Smyth
7 cung cấp quyền truy cập vào chức năng Win32 import tkinter as tk
from tkinter import filedialog
root = tk.Tk[]
root.withdraw[]
file_path = filedialog.askopenfilename[]
8. Từ ví dụ21 silver badges21 bronze badgesimport tkinter as tk
from tkinter import filedialog
root = tk.Tk[]
root.withdraw[]
file_path = filedialog.askopenfilename[]
5
Đã trả lời ngày 23 tháng 7 năm 2019 lúc 14:57
Kevin Smythkevin Smyth
1.84221 Huy hiệu bạc21 Huy hiệu đồng
Sử dụng Tkinter [Python 2] hoặc Tkinter [Python 3], thực sự có thể hiển thị hộp thoại mở tệp [xem các câu trả lời khác ở đây]. Tuy nhiên, xin lưu ý rằng giao diện người dùng của hộp thoại đó đã lỗi thời và không tương ứng với hộp thoại mở tệp mới hơn có sẵn trong Windows 10.
Hơn nữa - nếu bạn đang tìm cách nhúng hỗ trợ Python vào ứng dụng của riêng bạn - bạn sẽ sớm tìm ra thư viện Tkinter không phải là mã nguồn mở và thậm chí nhiều hơn - đó là thư viện thương mại.
- .
- Vì vậy, Thư viện Tkinter sẽ tốn tiền cho bất kỳ ứng dụng nào muốn nhúng Python.
Bản thân tôi đã tìm được thư viện Pythonnet:
Tổng quan ở đây: //pythonnet.github.io/
pip3 install pythonnet
Mã nguồn tại đây: //github.com/pythonnet/pythonnet
//stackoverflow.com/a/50446803/2338477
[Giấy phép MIT]
import sys
import ctypes
co_initialize = ctypes.windll.ole32.CoInitialize
# Force STA mode
co_initialize[None]
import clr
clr.AddReference['System.Windows.Forms']
from System.Windows.Forms import OpenFileDialog
file_dialog = OpenFileDialog[]
ret = file_dialog.ShowDialog[]
if ret != 1:
print["Cancelled"]
sys.exit[]
print[file_dialog.FileName]
Sử dụng lệnh sau có thể cài đặt Pythonnet:
Và ở đây bạn có thể tìm ra ví dụ làm việc để sử dụng hộp thoại Tệp mở:
Hãy để tôi sao chép một ví dụ ở đây:Nov 14, 2019 at 16:40
Nếu bạn cũng bỏ lỡ giao diện người dùng phức tạp hơn - Xem thư mục demo trong Pythonnet Git.TarmoPikaro
Tôi không chắc chắn về tính di động đối với hệ điều hành khác, chưa thử, nhưng .NET 5 được lên kế hoạch được chuyển sang nhiều hệ điều hành [tìm kiếm ".NET 5 nền tảng", //devblogs.microsoft.com/dotnet/intucing -net -5/] -Vì vậy, công nghệ này cũng là bằng chứng trong tương lai.1 gold badge43 silver badges53 bronze badges
6
Đã trả lời ngày 14 tháng 11 năm 2019 lúc 16:40
Tarmopikarotarmopikaro
4.3291 Huy hiệu vàng43 Huy hiệu bạc53 Huy hiệu đồngFeb 16, 2012 at 21:39
Nếu bạn không cần UI hoặc mong đợi chương trình sẽ chạy trong CLI, bạn có thể phân tích FilePath như một đối số. Điều này sẽ cho phép bạn sử dụng tính năng AutoComplete của CLI để nhanh chóng tìm thấy tệp bạn cần.SQDK
Điều này có lẽ sẽ chỉ tiện dụng nếu tập lệnh không tương tác bên cạnh đầu vào FilePath.3 gold badges17 silver badges16 bronze badges
3
Đã trả lời ngày 16 tháng 2 năm 2012 lúc 21:39
import webview
def webview_file_dialog[]:
file = None
def open_file_dialog[w]:
nonlocal file
try:
file = w.create_file_dialog[webview.OPEN_DIALOG][0]
except TypeError:
pass # user exited file dialog without picking
finally:
w.destroy[]
window = webview.create_window["", hidden=True]
webview.start[open_file_dialog, window]
# file will either be a string or None
return file
print[webview_file_dialog[]]
Sqdksqdk
3.7773 huy hiệu vàng17 Huy hiệu bạc16 Huy hiệu đồngJul 2, 2021 at 20:30
Một tùy chọn bất khả tri khác, hãy sử dụng pywebview:
import tkinter as tk
from tkinter import filedialog
root = tk.Tk[]
root.withdraw[]
file_path = filedialog.askopenfilename[]
0Môi trường: Python3.8.6 trên Mac - Mặc dù tôi đã sử dụng PyWebView trên Windows 10 trước đây.
Đã trả lời ngày 2 tháng 7 năm 2021 lúc 20:30
Tôi chỉ tình cờ thấy thủ thuật nhỏ này chỉ dành cho Windows: Chạy PowerShell.exe từ quy trình con.
Lưu ý việc sử dụng tùy chọn của các hằng số thư mục hệ thống. .Aug 28 at 5:27
Kiki Jewellkiki JewellKiki Jewell
7967 Huy hiệu bạc4 Huy hiệu đồng7 silver badges4 bronze badges
1