focus()

Fragen zu Tkinter.
Antworten
ganja
User
Beiträge: 189
Registriert: Mittwoch 3. Dezember 2014, 07:44

Hallo, ist es möglich focus auf maus click auf bestimmter position im Fenster, danach focus auf text-label nach dem man enter auf der Tastatur klickt wieder focus auf maus auf einer bestimmten position im Fenster, und immer wieder das gleiche, geht so etwas?

Danke Gruß
ganja
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

@ganja: Maus braucht keinen Fokus. Du klickst einfach irgendwo mit der Maus drauf. Aber Tastendrücke brauchen einen Fokus. Wenn Du auf der Tastatur etwas eingibst, dann wird das dort hingeschrieben, worauf der Focus ist, sofern man dort etwas schreiben kann. Aber mit der Maus kann man überall hinklicken. Fokus hat also mit der Maus nichts zu tun. Natürlich kann man mittels Mausklick auch den Fokus für die Tastatureingabe ändern.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Stimmmt nicht ganz. Der Fokus hat schon etwas mit dem Mausklick zu tun. Denn worauf Du mit der Maus klickst, das bekommt dann auch oft den Fokus. Wenn Du in ein Entry Feld klickst, dann kannst Du dann auch in dieses schreiben.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Buttons bekommen in tkinter normalerweise keinen Fokus. Aber man kann sie so einstellen, dass sie ihn bekommen.
Dann kann man den Fokus mit der Tab Taste wechseln. Hier sieht man das an der roten Umrandung:

Code: Alles auswählen

# -*- coding: utf-8 -*-

try:
    import tkinter as tk
except ImportError:
    import Tkinter as tk

class Application(tk.Tk):

    def __init__(self,**kwargs):
        tk.Tk.__init__(self,**kwargs)
        # widget definitions ===================================
        self.button1 = tk.Button(self,text='button1', takefocus=1, highlightcolor='red', highlightthickness='4')
        self.button2 = tk.Button(self,text='button2', takefocus=1, highlightcolor='red', highlightthickness='4')
        self.button3 = tk.Button(self,text='button3', takefocus=1, highlightcolor='red', highlightthickness='4')
        self.button1.pack(side='left')
        self.button2.pack(side='left')
        self.button3.pack(side='left')

if __name__ == '__main__':
    Application().mainloop()
Hier kann man dann etwa auch den Button dann mit der Leertaste drücken.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

Man kann aber den Fokus auch manuell setzen und dafür sorgen, dass man ihn nicht wechseln kann:

Code: Alles auswählen

# -*- coding: utf-8 -*-

try:
    import tkinter as tk
except ImportError:
    import Tkinter as tk

class Application(tk.Tk):

    def __init__(self,**kwargs):
        tk.Tk.__init__(self,**kwargs)
        # widget definitions ===================================
        self.button1 = tk.Button(self,text='button1', takefocus=0, highlightcolor='red', highlightthickness='4')
        self.button2 = tk.Button(self,text='button2', takefocus=0, highlightcolor='red', highlightthickness='4')
        self.button3 = tk.Button(self,text='button3', takefocus=0, highlightcolor='red', highlightthickness='4')
        self.button1.pack(side='left')
        self.button2.pack(side='left')
        self.button3.pack(side='left')

        self.button2.focus()

if __name__ == '__main__':
    Application().mainloop()
ganja
User
Beiträge: 189
Registriert: Mittwoch 3. Dezember 2014, 07:44

Vielen Dank erstmal, ich muss jetzt schauen ob ich es hinbekomme so wie ich es mir vorstelle, wenn nicht melde mich wieder

Danke

Gruß
ganja
Antworten