2010-07-30 17 views
9

मैं ओएस एक्स का उपयोग कर रहा हूं। मैं इसे खोजक से चलाने के लिए अपनी स्क्रिप्ट पर डबल क्लिक कर रहा हूं। यह स्क्रिप्ट आयात करता है और नीचे दिए गए फ़ंक्शन को चलाता है।टिंकर फ़ाइल संवाद फोकस कैसे दें

मैं स्क्रिप्ट को एक टिंकर ओपन फ़ाइल संवाद प्रस्तुत करना चाहता हूं और चयनित फाइलों की एक सूची वापस करना चाहता हूं।

यहाँ मैं अब तक है:

def open_files(starting_dir): 
    """Returns list of filenames+paths given starting dir""" 
    import Tkinter 
    import tkFileDialog 

    root = Tkinter.Tk() 
    root.withdraw() # Hide root window 
    filenames = tkFileDialog.askopenfilenames(parent=root,initialdir=starting_dir) 
    return list(filenames) 

मैं दोगुना स्क्रिप्ट क्लिक करें, टर्मिनल को खोलता है, Tkinter फ़ाइल संवाद खोलता है। समस्या यह है कि फ़ाइल संवाद टर्मिनल के पीछे है।

क्या टर्मिनल को दबाने या फ़ाइल संवाद को शीर्ष पर समाप्त करने का कोई तरीका है?

धन्यवाद, वेस

+0

इससे मदद मिल सकती है: http://stackoverflow.com/questions/1810497/hide-console-for-tkinter-app-on-osx –

+0

धन्यवाद, मैं इसे लंबे समय तक उपयोग करने में देखूंगा। अभी यह कार्यक्रम बहुत आसान है और जल्दी से तेज हो रहा है। मैं इस त्रासदी को हल करने की एक त्वरित विधि ढूंढ रहा था। – Wes

उत्तर

0

focus_set विधि का प्रयास करें। अधिक के लिए, पृष्ठ PythonWare'sAn Introduction to Tkinter पर देखें।

+0

धन्यवाद। मैंने इसे पढ़ा मुझे यकीन नहीं है कि मैं निर्मित टीके फ़ाइल संवाद विंडो पर set_focus() विधि का उपयोग कैसे कर सकता हूं? – Wes

8

किसी भी व्यक्ति जो Google के माध्यम से यहां समाप्त होता है (जैसे मैंने किया), यहां एक हैक मैंने बनाया है जो विंडोज और उबंटू दोनों में काम करता है। मेरे मामले में, मुझे वास्तव में टर्मिनल की अभी भी आवश्यकता है, लेकिन केवल प्रदर्शित होने पर संवाद शीर्ष पर होना चाहिए।

# Make a top-level instance and hide since it is ugly and big. 
root = Tkinter.Tk() 
root.withdraw() 

# Make it almost invisible - no decorations, 0 size, top left corner. 
root.overrideredirect(True) 
root.geometry('0x0+0+0') 

# Show window again and lift it to top so it can get focus, 
# otherwise dialogs will end up behind the terminal. 
root.deiconify() 
root.lift() 
root.focus_force() 

filenames = tkFileDialog.askopenfilenames(parent=root) # Or some other dialog 

# Get rid of the top-level instance once to make it actually invisible. 
root.destroy() 
+0

शानदार! पूरी तरह से काम करता है –

+0

इसका उपयोग करें: विंडो अदृश्य बनाने के लिए root.attributes ('- अल्फा', 0.3) –

4

पायथन पर ध्यान देने के लिए AppleEvents का उपयोग करें। उदाहरण के लिए:

import os 

    os.system('''/usr/bin/osascript -e 'tell app "Finder" to set frontmost of process "Python" to true' ''') 
+0

टीके तंत्र (जो रूट या पैरेंट विंडो पर 'focus_set()' और 'focus_force()' तक उबालते प्रतीत होते हैं) लिनक्स या अन्य जगहों पर काम कर सकता है, लेकिन वे मैक ओएस एक्स पर काम नहीं करते हैं। यह एकमात्र चीज है जो मैक पर काम करती है। –

1

फ़ाइल नाम = tkFileDialog.askopenfilenames (मूल = जड़, initialdir = starting_dir)

अच्छी तरह से माता पिता = जड़ शीर्ष पर tkFileDialog बनाने के लिए पर्याप्त है, यह सरल साधन, जो आपके मूल शीर्ष पर नहीं है, शीर्ष पर रूट बनाने का प्रयास करें और स्वचालित रूप से tkFileDialog माता-पिता के ऊपर ले जाएगा।

संबंधित मुद्दे