2010-07-30 36 views
9

Tôi đang sử dụng OS X. Tôi đang nhấp đúp vào tập lệnh của mình để chạy tập lệnh từ Trình tìm kiếm. Tập lệnh này sẽ nhập và chạy hàm bên dưới.Cách lấy tiêu điểm hộp thoại tập tin Tkinter

Tôi muốn tập lệnh trình bày một hộp thoại mở tệp Tkinter và trả về danh sách các tệp được chọn.

Dưới đây là những gì tôi có cho đến nay:

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) 

tôi nhấp đúp chuột vào kịch bản, thiết bị đầu cuối mở ra, hộp thoại tập tin Tkinter mở ra. Sự cố là hộp thoại tệp nằm phía sau thiết bị đầu cuối.

Có cách nào để chặn thiết bị đầu cuối hoặc đảm bảo hộp thoại tệp kết thúc ở trên cùng không?

Cảm ơn, Wes

+0

Điều này có thể giúp: http://stackoverflow.com/questions/1810497/hide-console-for-tkinter-app-on-osx –

+0

Cảm ơn bạn sẽ xem xét việc sử dụng điều đó trong thời gian dài. Ngay bây giờ chương trình này rất đơn giản và đang lặp lại nhanh chóng. Tôi đang tìm cách tìm một phương pháp nhanh chóng để giải quyết sự khó chịu này. – Wes

Trả lời

0

Hãy thử phương pháp focus_set. Để biết thêm thông tin, hãy xem trang Dialog Windows trong PythonWare'sAn Introduction to Tkinter.

+0

Cảm ơn bạn. Tôi đọc nó. Tôi không chắc làm thế nào tôi có thể sử dụng phương thức set_focus() trên cửa sổ hộp thoại tập tin được xây dựng trong TK? – Wes

8

Đối với bất kỳ ai kết thúc ở đây thông qua Google (như tôi đã làm), đây là một hack tôi đã nghĩ ra rằng hoạt động trong cả Windows và Ubuntu. Trong trường hợp của tôi, tôi thực sự vẫn cần thiết bị đầu cuối, nhưng chỉ muốn hộp thoại ở trên cùng khi được hiển thị.

# 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

Rực rỡ! hoạt động hoàn hảo –

+0

Sử dụng: root.attributes ('- alpha', 0,3) để làm cho cửa sổ vô hình –

4

Sử dụng AppleEvents để tập trung vào Python. Ví dụ:

import os 

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

Cơ chế Tk (dường như đun sôi xuống 'focus_set()' và 'focus_force()' trên cửa sổ gốc hoặc cửa sổ chính) có thể hoạt động trên Linux hoặc ở nơi khác, nhưng chúng không hoạt động trên Mac OS X. Đây là điều duy nhất tôi tìm thấy hoạt động trên Mac. –

1

tên file = tkFileDialog.askopenfilenames (mẹ = root, initialdir = starting_dir)

cũng mẹ = gốc là đủ để làm tkFileDialog trên đầu, nó có nghĩa là đơn giản mà gốc của bạn không phải là trên đầu trang, cố gắng làm cho root trên đầu trang và tkFileDialog tự động sẽ đứng đầu của cha mẹ.

Các vấn đề liên quan