Fokus auf ein neu erstelltes TK-Fenster - automatisch

Fragen zu Tkinter.
Antworten
ebs55
User
Beiträge: 17
Registriert: Sonntag 29. April 2018, 14:27

Hallo, bin neu hier, hab aber schon ca. 50 oder mehr Stunden in Sachen python auf meinem Mac geübt.
Dabei schon mehrere apps mit TK-Fenster + Label + Eingabefelder + Buttons erstellt.

Nach über 4 Stunden erfolgloser Suche (hier + Suchmaschinen) gebe ich auf und hoffe auf eure Hilfe.

meine Frage:
Kann der Fokus auf das neu erstellte TK-Fenster so gesetzt werden, dass ich nicht mehr mit der Maus (bzw. dem Pad) auf dieses neue Fenster klicken muss?

Vielen Dank schon vorab.
ebs55
User
Beiträge: 17
Registriert: Sonntag 29. April 2018, 14:27

Ich schick noch einen code-Ausschnitt hinterher, obwohl das m.E. nach nix bringt;
Denn es könnte JEDES Script sein, das ein (neues) Fenster öffnet...

Das klappt ja alles im code - lästig ist eben nur, dass ich dann "händisch" in das erzeugte Fenster clicken muss :cry:
Na, vielleicht fällt jemandem was dazu ein?!

Hab zwischendurch (nochmal) alle Attribute zu "TkInter" und "TkInter.commondialog"
und "TkInter.PanedWindows" durchforstet - und natürlich (noch) nicht alle zig hundert Attribute
getestet ( wie z.B. BROWSE.BaseWidget, CURRENT, oder PanedWindow.winfo_name, -parent, pathname
oder "PanedWindow.winfo_screen(self) = "Screen-Name of this widget" oder
"PanedWindow.winfo_toplevel(self)"

Hattet Ihr damit schon mal etwas probiert?
[codebox=python file=e_gold.pyw]
(die Idee ist "geklaut" aus irgend einem Forumsbeitrag - vlt. sogar hier!?)

import tkinter as tk
import gui

OPTIONS = ["Euro -> Gold", "Gold -> Euro"]
UMRECHNUNG_EURO_GOLD = 35.1613

class Application(tk.Tk):
def __init__(self, **kwargs):
tk.Tk.__init__(self, **kwargs)
gui.init_app(self)
# tk.focus_set(self) # -> module 'tkinter' has no attribute 'focus_set'
self.button_2.configure(command=self.destroy)
self.bind(sequence='<Return>', func=self.bt_action)
self.bind(sequence='<Escape>', func=self.bt_ende)

self.option = tk.StringVar(self)
self.option.set(OPTIONS[1])
optionen = tk.OptionMenu(self, self.option, *OPTIONS)
optionen.grid(row = 3, column = 0, pady = 5)
self.entry_3.focus()

def bt_ende(self, event):
self.quit()

def bt_action(self, event):
if self.entry_3.get() == '':
betrag=1
print('1 eingefügt. Nochmal MIT Wert !')
self.label_5.configure(text='Wert vergessen!')
else:
betrag = float(self.entry_3.get())
self.label_5.configure(text='')

wahl = self.option.get()
if wahl == OPTIONS[0]:
betrag /= UMRECHNUNG_EURO_GOLD
einheit= "Gramm"
elif wahl == OPTIONS[1]:
betrag *= UMRECHNUNG_EURO_GOLD
einheit = "Euro"
message = "{:.2f} {}".format(betrag, einheit)
self.label_3.configure(text=message)
# Application().focus_set()

if __name__ == '__main__':
Application().mainloop()
[/code]
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das ist OS-abhängig, und hier https://stackoverflow.com/questions/160 ... vel-active findest du ein paar Ansätze. Wenn das nur für deine kleinen Testprogramme ist, kannst du das machen. Wenn du ein Programm zu schreiben gedenkst, das mir während des Starts den Fokus wegnimmt, “haue” ich dich. Das ist sehr miese UX, jemanden faktisch an der Nutzung des Rechners zu hindern, während man sein Programm hochfährt.
ebs55
User
Beiträge: 17
Registriert: Sonntag 29. April 2018, 14:27

Vielen Dank für deine Antwort;

Mit deiner Frage bzw. fast Drohung hast du ja soooo recht - darüber habe ich
überhaupt nicht nachgedacht.

Würde das tatsächlich bedeuten, dass ich dann aus DEM Terminal heraus
(könnte ich noch ein neues Terminal-Fenster aufmachen?) -
NICHTS mehr unternehmen könnte? :shock:

Dann bin ich mir nicht mehr sicher, ob ich "diesen Weg" weiter verfolgen werde :( :roll:

Ganz herzlichen Dank für den Hinweis.
ebs55
User
Beiträge: 17
Registriert: Sonntag 29. April 2018, 14:27

bis auf Weiteres arbeite ich ja "nur lokal" mit dem python Interpreter - solange ist ja kein Anderer gefährdet - aber trotzdem ein sehr aufwühlender Einwand !!! - bin begeistert - 8)
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nein, nicht “nichts”. Aber du startest ein Programm, das dauert, du wendest dich etwas anderem zu - und dann reißt dir das irgendwann den Fokus weg.

Mein emacs zb macht das für jede neu geöffnete Datei. Wenn ich den nun neu starte, und er mehrere Dutzend Dateien öffnet die vorher offen waren, dann kann ich Minuten lang nix tun. Nervt. Und auch nur einmal nervt ;)
ebs55
User
Beiträge: 17
Registriert: Sonntag 29. April 2018, 14:27

o.k. das leuchtet ein; Bin gespannt, was ich über den obigen link noch rauskriege...
Ich werde kurz berichten.
Antworten