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.
Fokus auf ein neu erstelltes TK-Fenster - automatisch
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
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]
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
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]
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.
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?
Dann bin ich mir nicht mehr sicher, ob ich "diesen Weg" weiter verfolgen werde
Ganz herzlichen Dank für den Hinweis.
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?
Dann bin ich mir nicht mehr sicher, ob ich "diesen Weg" weiter verfolgen werde
Ganz herzlichen Dank für den Hinweis.
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
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