ओवरराइट करने की अनुमति नहीं है मैं tkinter में एक savefile संवाद करने की कोशिश कर रहा हूँ। मुझे बाद में उपयोग करने के लिए फ़ाइल नाम को सहेजने की जरूरत है। हालांकि, मैं नहीं चाहता कि दायर किया गया पहले से ही मौजूदा फ़ाइल नाम का चयन स्वीकार कर सके।फ़ाइल संवाद के रूप में सहेजें - कैसे
अब तक मैं केवल यह है:
from tkinter import filedialog
my_file = filedialog.asksaveasfilename(defaultextension = ".myfile",
filetypes = [("MY SUPER FILE", ".myfile"),
("All files", ".*")])
एक संभावना यह फ़ाइल नाम पाने के लिए किया जाएगा, तो देखें कि यह मौजूद है (os.path.isfile
प्रयोग करके) और फिर नए नाम के लिए उपयोगकर्ता से पूछें कि वहाँ पहले से ही एक फाइल है एक ही नाम के साथ। हालांकि, tkinter दाखिलकर्ता उपयोगकर्ता से पूछता है "फ़ाइल पहले से मौजूद है। क्या आप ओवरराइट करना चाहते हैं?"। तो यह भ्रमित लगता है अगर बाद में मैं उपयोगकर्ता को बताता हूं कि मैं फ़ाइल नाम पसंद नहीं करता हूं। क्या उपयोगकर्ता को ओवरराइटिंग के बारे में नहीं पूछने के लिए टिंकटर दायरियल को मजबूर करने का कोई तरीका है?
संपादित करें: उत्तरों में दिए गए सुझावों के आधार पर, मैंने अपना स्वयं का फ़ाइल फ़ाइल संवाद करने का प्रयास किया।
class MySaveFileDialog(filedialog.FileDialog):
""" File save dialog that does not allow overwriting of existing file"""
def ok_command(self):
file = self.get_selection()
if os.path.exists(file):
if os.path.isdir(file):
self.master.bell()
return
messagebox.showarning("The current file name already exists. Please give another name to save your file.")
else:
head, tail = os.path.split(file)
if not os.path.isdir(head):
self.master.bell()
return
self.quit(file)
इसलिए, यह बहुत सरल है:
मैं मूल रूप से केवल संवाद बचाने tkinter के लिए एक चेतावनी गयी। तब मैंने सोचा: मुझे अपना खुद का asksaveasfilename
फ़ंक्शन बनाना होगा। मैं स्रोत की जांच करने के लिए चला गया:
def asksaveasfilename(**options):
"Ask for a filename to save as"
return SaveAs(**options).show()
Humm .. मैं क्या SaveAs
कर रही है यह देखने के लिए की जरूरत है।
class SaveAs(_Dialog):
"Ask for a filename to save as"
command = "tk_getSaveFile"
आॅनंडड ... मैं खो गया हूं। मुझे समझ में नहीं आता कि यह टुकड़े एक साथ कैसे फिट होते हैं। 'SaveAs' में केवल tk_getSaveFile
कमांड है। SaveFileDialog का उपयोग यहां कैसे किया जा रहा है? और मैं अपना खुद का myasksaveasfilename
फ़ंक्शन कैसे बना सकता हूं?
आप कार्य करें:
यहाँ एक नकली निर्भर है इसकी जरूरत है? गैर-मानक व्यवहार वाले संवाद उपयोगकर्ता को भ्रमित कर रहे हैं। साथ ही, यदि उपयोगकर्ता किसी मौजूदा फ़ाइल को ओवर-लिखना चाहता है तो उन्हें चेतावनी देना अच्छा होता है, लेकिन वास्तव में उन्हें ऐसा करने से रोकने में परेशानी होती है। इसलिए यदि चयनित नाम किसी मौजूदा फ़ाइल से मेल खाता है, तो शायद आप पैर में शूट करने से पहले उन्हें एक आखिरी मौका देने के लिए 'askokcancel' संदेश बॉक्स पॉप अप कर सकते हैं।:) –
@ पीएम 2 रिंग: मैं आपकी चिंता को समझता हूं। और मैं इसे इस तरह से नहीं करना चाहूंगा, लेकिन मुझे वास्तव में इसकी आवश्यकता है :) – zelite
ऐसी समस्याएं जो दो समस्याएं हैं: 1) क्या उपयोगकर्ता को ऐसा करने का दूसरा मतलब है? 2) क्या यह गलती से अधिक स्वेच्छा से इस्तेमाल किया जाएगा? यहां 1) उत्तर हाँ है (आप ऐप के बाहर फ़ाइल को हटा सकते हैं) और 2) उत्तर ऐप के आधार पर निर्भर करता है। –