Как придать файлу Tkinter диалоги - PullRequest
12 голосов
/ 31 июля 2010

Я использую OS X. Я дважды щелкаю свой скрипт, чтобы запустить его из Finder.Этот скрипт импортирует и запускает нижеприведенную функцию.

Я бы хотел, чтобы скрипт представлял диалог открытия файла Tkinter и возвращал список выбранных файлов.

Вот что у меня есть на данный момент:

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. Проблема в том, что диалоговое окно файла находится за терминалом.

Есть ли способ подавить терминал или убедиться, что диалоговое окно файла заканчивается сверху?

Спасибо, Уэс

Ответы [ 5 ]

11 голосов
/ 17 августа 2011

Для всех, кто попадает сюда через Google (как я), я разработал хак, который работает как в Windows, так и в Ubuntu.В моем случае мне все еще нужен терминал, но я просто хочу, чтобы диалоговое окно отображалось сверху.

# 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()
5 голосов
/ 08 января 2012

Используйте AppleEvents, чтобы сфокусироваться на Python.Например:

import os

    os.system('''/usr/bin/osascript -e 'tell app "Finder" to set frontmost of process "Python" to true' ''')
1 голос
/ 12 июля 2018

У меня была эта проблема с окном позади Spyder:

root = tk.Tk()
root.overrideredirect(True)
root.geometry('0x0+0+0')
root.focus_force()
FT = [("%s files" % ftype, "*.%s" % ftype), ('All Files', '*.*')]
ttl = 'Select File'
File = filedialog.askopenfilename(parent=root, title=ttl, filetypes=FT)
root.withdraw()
1 голос
/ 24 февраля 2014

filenames = tkFileDialog.askopenfilenames(parent=root,initialdir=starting_dir)

Ну parent=root достаточно для того, чтобы сделать tkFileDialog сверху.Это просто означает, что ваш root не на вершине, попробуйте сделать root сверху, и автоматически tkFileDialog возьмет верх над родителем.

0 голосов
/ 31 июля 2010

Попробуйте метод focus_set.Для получения дополнительной информации см. Страницу Dialog Windows в PythonWare's Введение в Tkinter .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...