Python GUI Rand ändern?
Abend, wollte mal wissen ob jemand weiß wie man von den in Python langweiligen 4 eckigen fenstern wegkommt.
Unzwar möchte ich nämlich ein Fenster machen das die Ecken durch Kanten ersetzt um dem ganzen einen SCI-FI look zu geben.
Außerdem möchte ich noch die Titel-leiste los werden. Hab das auch bereits mit: "root.overrideredirect(True)" probiert aber danach kann man leider das gesammte GUI nicht mehr bewegen.
Ich benutze die Library CostumTkinter (Eine Erweiterung).
Auf dem Bild erkennt man anhand der Grauen Linie wo eigentlich das fenster aufhören sollte. (Als Ich das Bild designed habe, habe ich die stellen hinter der grauen Linie als Transparent markiert, also müsste dahinter eigentlich nichts sein.)
1 Antwort
Wichtig: Ich kenne CustomTkinter nicht - Vielleicht gibt es dort hilfreiche Dinge, die es im normalen Tkinter nicht gibt und die dir diesbezüglich helfen könnten. Meine Antwort bezieht sich auf das normale Tkinter - Das solltest du allerdings trotzdem genau so umsetzen können.
Dein Ansatz um die Titelleiste loszuwerden war definitiv richtig. Du musst nach dem Entfernen der Titelleiste 'nur' eine eigene Logik implementieren, um das Fenster zu bewegen. Dafür könntest du 2 Event Handler erstellen (für Linksklick <Button-1> und für die Bewegung der Maus im geklickten Zustand <B1-Motion>).
Beim Drücken der linken Maustaste speicherst du einfach die aktuelle Position der Maus und beim Bewegen der Maus bewegst du dann das Fenster entsprechend der aktuellen Distanz zum gespeicherten Startpunkt.
Die genaue implementierung davon kann ich dir auf die Schnelle leider nicht sagen, da müsstest du einfach mal googlen - Dort solltest du etliche Codebeispiele und hilfestellungen diesbezüglich finden.
Nun aber zum zweiten Problem. Wenn die Titelleiste entfernt ist, hast du ja immer noch den Hintergrund von dem Fenster, welchen du ja scheinbar auch entfernt haben möchtest, damit der Rand von deinem Bild auch der Rand vom Fenster ist.
Dieser Schritt ist leider von Betriebssystem zu Betriebssystem unterschiedlich. Wenn du nur für Windows planst, kannst du einfach folgendes einfügen:
root.wm_attributes("-transparentcolor", '#F0F0F0')
(#F0F0F0 ist die Standard Hintergrundfarbe eines Fensters in Windows)
Da dieser Farbcode allerdings unter Umständen noch an anderen Stellen in deinem Programm auftreten könnte, solltest du dem Fenster eine Hintergrundfarbe geben, die definitiv eindeutig ist und somit ohne Probleme transparent gemacht werden kann.
Die Hintergrundfarbe änderst du wie folgt:
root.configure(background='#FARBCODE')