Seite 1 von 1

Focus für FileDialog

Verfasst: Montag 20. Juli 2015, 13:40
von finswimmer77
Hallo,
in einem vorwiegend als Konsolenprogramm laufenden Programm von mir wird mittels input die Eingabe vom Benutzer entgegen genommen. An einigen Stellen führt das dazu das ein FileDialog von tkinter geöffnet wird. Der Dialog (in meinem Fall askdirectory) bekommt hier unter Windows 7 leider nicht automatisch den Focus. Gab es vorher keine Benutzereingabe mittel input erhalt der Dialog den Focus.

Ich habe es auf den folgenden bei mir reproduzierbaren Code runtergebrochen:

Code: Alles auswählen

import tkinter
import tkinter.filedialog

while True:
    sel = input('Gibt was ein: ')
    break

root = tkinter.Tk()
root.withdraw()
directory = tkinter.filedialog.askdirectory(parent=root, initialdir="./", title="text")
root.destroy()

print(directory)
Kommentiere ich den input-Teil aus erhält der Dialog wie gesagt den Focus.

Kann das jemand reproduzieren und weiß abhilfe?

fin swimmer

PS: Achja, ich programmiere mit python3

Re: Focus für FileDialog

Verfasst: Mittwoch 22. Juli 2015, 15:46
von VJSchneid
Hallo finswimmer77,
der Focus des FileDialog bezieht sich auf das TopLevel Fenster, welches du aber mittels withdraw() versteckt hast und daher auch keinen Fokus besitzen kann.
Du kannst alternativ, statt withdraw(), dein Fenster mit overrideredirect(True) und geometry('0x0+0+0') unsichtbar machen. Anschließend musst du nurnoch den Fokus mit focus_force() auf dein TopLevel Fenster setzen.

Der Code würde dann in etwa so aussehen:

Code: Alles auswählen

import tkinter
import tkinter.filedialog

while True:
    sel = input('Gibt was ein: ')
    break

root = tkinter.Tk()
root.focus_force()
root.overrideredirect(True)
root.geometry('0x0+0+0')
directory = tkinter.filedialog.askdirectory(parent=root, initialdir="./", title="text")
root.destroy()

print(directory)

Re: Focus für FileDialog

Verfasst: Donnerstag 23. Juli 2015, 08:15
von finswimmer77
Hallo VJSchneid,
vielen Dank für deine Antwort. Damit bekommt der FileDialog tatsächlich den Focus.

Der Focus liegt dabei jedoch auf dem "OK"-Button. Ich hätte ihn aber gerne gleich in dem Bereich mit den Ordnern (sowie es mein Code oben tut wenn man die while-Schleife rausnimmt). Irgendwelche Hinweise für mich?

fin swimmer