Focus für FileDialog

Fragen zu Tkinter.
Antworten
finswimmer77
User
Beiträge: 13
Registriert: Freitag 14. Dezember 2012, 22:07

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
VJSchneid
User
Beiträge: 1
Registriert: Mittwoch 22. Juli 2015, 15:16

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)
finswimmer77
User
Beiträge: 13
Registriert: Freitag 14. Dezember 2012, 22:07

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
Antworten