tk Leiste

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

Montag 13. Juni 2016, 21:09

Hallo,
ist es möglich die leiste auszublenden vom Hauptfenster.
root.geometry("1920x1080+0+0")
oder die letzte null als negativ zahl zu definieren, zb. -50 so das die Leiste nicht sichtbar ist, klar hat man dann die 3 Buttons nicht verkleinern vergrössern schließen, aber ich brauche die nicht.

Gruß
ganja
Sirius3
User
Beiträge: 8297
Registriert: Sonntag 21. Oktober 2012, 17:20

Dienstag 14. Juni 2016, 07:04

So:

Code: Alles auswählen

root = tk.Tk()
root.geometry("1920x1080+0+0")
root.overrideredirect(1)
ganja
User
Beiträge: 101
Registriert: Mittwoch 3. Dezember 2014, 07:44

Dienstag 14. Juni 2016, 08:09

Hallo,
@Sirius3 Danke, genau das habe ich gesucht, aber jetzt habe ich das Problem das meine Tastenbefehle nicht gehen, nur wenn ich direkt die Buttons per Maus anklicke dann funktioniert es, mit taste geht nicht, gibt es die Möglichkeit das Hauptfenster weiter nach oben zu schieben so das man die Leiste dann versteckt?
root.geometry("1920x1080+0+0")
z.b. root.geometry("1920x1080+0-20") bei meinem Test geht es nicht, vielleicht geht es aber doch auf einem anderem weg

Danke
Gruß
ganja
Sirius3
User
Beiträge: 8297
Registriert: Sonntag 21. Oktober 2012, 17:20

Dienstag 14. Juni 2016, 08:37

@ganja: dass Deine Tastatur-Kommandos nicht angenommen werden, muß ein anderes Problem sein. Du kannst mal versuchen, den Fokus explizit auf das Fenster zu setzen.
ganja
User
Beiträge: 101
Registriert: Mittwoch 3. Dezember 2014, 07:44

Dienstag 14. Juni 2016, 09:01

@Sirius3 so sieht es aus, könnte 'parent.bind' main problem sein?

Code: Alles auswählen

parent.bind('<s>', self.s_Key)

    #@staticmethod
	def s_Key(self, event):
		if self.stopwatch.is_running:
			self.stopwatch.stop()
			self.get_erg()
			self.update_erg()
		elif self.stopwatch.elapsed_time:
			self.stopwatch.reset()
		else:
			self.stopwatch.start()
		self.update_display()

def main():
	root = tk.Tk()
	root.geometry("1020x815+0+0")
	#root.overrideredirect(1)
	#root.geometry("{0}x{1}+0+0".format(root.winfo_screenwidth(), root.winfo_screenheight()))
	root.focus_set()
	ui = StopwatchUI(root, Stopwatch())
	ui.pack()
	root.mainloop()
Danke
Gruß
ganja
ganja
User
Beiträge: 101
Registriert: Mittwoch 3. Dezember 2014, 07:44

Dienstag 14. Juni 2016, 19:10

Hat keiner eine Idee wie ich das Problem lösen kann, versuche es den ganzen tag komme aber nicht weiter, warum funktioniert die maus und die Tastatur Eingabe nicht, was mache ich falsch, muss ich eventuell alles umschreiben?

Danke im Voraus

Gruß
ganja
ganja
User
Beiträge: 101
Registriert: Mittwoch 3. Dezember 2014, 07:44

Mittwoch 15. Juni 2016, 13:25

Hallo,
kann man irgendwie größe erzwingen wenn man das hier benutzt "root.attributes('-fullscreen', True)".
das hier funktioniert bei mir nicht 'root.overrideredirect(1)' da ich dan kein key anbinden kann, netz ist voll davon das es nicht geht, bei Windows geht anscheinend aber Linux, OSX nicht.

Danke

Gruß
ganja
Benutzeravatar
wuf
User
Beiträge: 1483
Registriert: Sonntag 8. Juni 2003, 09:50

Donnerstag 16. Juni 2016, 09:09

Hallo ganja

Könntest du dein Skript in
viewtopic.php?p=296261#p296261
so ergänzen, dass es ausführbar ist?

Hier ein Prototyp für einen Fensterwechsel von vorgegebener Grösse auf Fullscreen Grösse und zurück:
N.B. Auch die Taste 's' funktioniert hiermit.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

# BEMERKUNG: Funktioniert unter Linux & Windows!
#            Wechsel der Fenstergrösse mit Taste F11
#            von einer gegebenen Grösse auf Fullscreen
#            und wieder zurück.

try:
    #~~ For Python 2.x
    import Tkinter as tk
except ImportError:
    #~~ For Python 3.x
    import tkinter as tk

APP_WIN_XPOS = 50
APP_WIN_YPOS = 300
APP_WIN_WIDTH = 400
APP_WIN_HEIGHT = 400

class FullScreenToggle(object):
   
    def __init__(self, app_win):
        self.app_win = app_win
        self.fullscreen = False

        self.app_win.protocol("WM_DELETE_WINDOW", self.close)
        self.app_win.bind('<F11>', self.toggle_screen_size)
        self.app_win.bind('<s>', self.s_key)
        
        self.label_text = tk.StringVar()
        self.label = tk.Label(self.app_win, textvariable=self.label_text)
        self.label.pack(expand=True)
        self.label_text.set("Drücke die Taste F11 für Fullscreen")
        
        self.button_close = tk.Button(self.app_win, text='Anwendung schliessen',
            command=self.close)
        self.button_close.pack(pady=2)
        
        self.app_win.focus_set()
    
    def s_key(self, event):
        print("Du hast die Taste s gedrückt")
        
    def toggle_screen_size(self, event):
        self.fullscreen = not self.fullscreen
        text = (("Normale Fenstergrösse", "Drücke Taste F11 für Fullscreen"),
            ("Fullscreen", "Drücke Taste F11 für normale Fenstergtösse")
            )[self.fullscreen]
        self.label_text.set(text)
        self.app_win.wm_attributes("-fullscreen", self.fullscreen)
            
    def close(self):
        print("Do things before closing application"
        self.app_win.destroy()

def main():
    app_win = tk.Tk()
    app_win.title("Fullscreen Toggle")
    app_win.geometry('{0}x{1}+{2}+{3}'.format(
        APP_WIN_WIDTH, APP_WIN_HEIGHT, APP_WIN_XPOS, APP_WIN_YPOS))
    
    FullScreenToggle(app_win)
    
    app_win.mainloop()
        
if __name__ == '__main__':
    main()                
Gruss wuf :wink:
Take it easy Mates!
Benutzeravatar
wuf
User
Beiträge: 1483
Registriert: Sonntag 8. Juni 2003, 09:50

Donnerstag 16. Juni 2016, 10:28

Nachkorrektur durch wuf:

Da es nicht mehr möglich ist einen Beitrag nach einer gewissen Zeit korrigieren zu können erledige ich dies mit einem neuen Eintrag. Das Skript muss wie folgt angepasst werden:

Code: Alles auswählen

    def close(self):
        print("Do things before closing application")
        self.app_win.destroy()
Gruss wuf :wink:
Take it easy Mates!
ganja
User
Beiträge: 101
Registriert: Mittwoch 3. Dezember 2014, 07:44

Donnerstag 16. Juni 2016, 12:32

Hallo @wuf,
Vielen Dank für deine Hilfe, aber ich habe nicht eine Tastatur zu Verfügung, das Fenster soll schon zu definierten Grösse starten ohne tk leiste oben, ich habe ein gerät welches einen bestimmten druck einer taste simuliert und dann etwas macht, mit dem Tipp von @Sirius habe ich die leiste oben weg bekommen aber leider hat der tasten druck nicht mehr funktioniert, dann dachte ich das das Fenster in negativen Bereich definiere z.b.(400x400+0-50) damit würde ich die leiste verstecken, das habe ich leider nicht Genschaft. Ich versuche ein anderes Programm darüber zu öffnen, und überlappe dann die leiste andere Idee habe ich im Moment nicht.

Danke
Gruß
ganja
ganja
User
Beiträge: 101
Registriert: Mittwoch 3. Dezember 2014, 07:44

Donnerstag 16. Juni 2016, 12:41

@wuf kannst du bei deinem code app_win.overrideredirect(1) versuchen?

Gruß
Ganja
Benutzeravatar
wuf
User
Beiträge: 1483
Registriert: Sonntag 8. Juni 2003, 09:50

Donnerstag 16. Juni 2016, 13:26

Hi ganja

Siehst du beim ausführen des folgenden Skript immer noch ein Titelleiste?

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

try:
    #~~ For Python 2.x
    import Tkinter as tk
except ImportError:
    #~~ For Python 3.x
    import tkinter as tk

class FullScreenWindow(object):
   
    def __init__(self, app_win):
        self.app_win = app_win
        self.fullscreen = True

        self.app_win.bind('<s>', self.s_key)
        self.app_win.wm_attributes("-fullscreen", self.fullscreen)
        
        self.button_close = tk.Button(self.app_win, text='Anwendung schliessen',
            command=self.close)
        self.button_close.pack(expand=True)
        
        self.app_win.focus_set()
    
    def s_key(self, event):
        print("Du hast die Taste s gedrückt")
        
            
    def close(self):
        print("Do things before closing application")
        self.app_win.destroy()

def main():
    app_win = tk.Tk()
    app_win.title("Fullscreen Toggle")
   
    FullScreenWindow(app_win)
    
    app_win.mainloop()
        
if __name__ == '__main__':
    main()                
Den Code von sirius werde ich noch ausprobieren.

Gruss wuf :wink:
Take it easy Mates!
ganja
User
Beiträge: 101
Registriert: Mittwoch 3. Dezember 2014, 07:44

Donnerstag 16. Juni 2016, 14:03

hallo @wuf, ich kann es nicht im fullscreen ausführen, das habe ich auf andere weise gelöst, das passt.
Ich möchte feste fenstergröße ohne tk leiste z.b. (400x400+0+0) und das die taste egal a oder b oder s funktioniert.
self.root.attributes('-fullscreen', "1020x815+0+0") hier mit bekomme ich mein fullscreen und tasten gehen,
aber feste größe des Fensters und ohne tk leiste geht nicht

self.root.geometry("1020x815+0+0")
self.root.overrideredirect(1)
self.root.focus_force()

hiermit wird kein tasten druck erkannt ich bin nicht im Fenster
Benutzeravatar
wuf
User
Beiträge: 1483
Registriert: Sonntag 8. Juni 2003, 09:50

Donnerstag 16. Juni 2016, 18:16

Hi ganja

Es ist tatsächlich so, dass bei Verwendung von:
self.root.overrideredirect(1)
die Tastatur-Ereignisse nicht mehr funktionieren. Danke für deinen Hinweis.

Gruss von wuf :wink:
Take it easy Mates!
ganja
User
Beiträge: 101
Registriert: Mittwoch 3. Dezember 2014, 07:44

Freitag 24. Juni 2016, 19:20

hallo @wuf,
nichts zu danken (schade das es nicht geht), ich danke dir das du dich beteiligt hast und mir gezeigt hast wie ich noch die leiste weg bekomme und Fenster über key vergrössern kann.

Gruß
ganja
Antworten