root.overrideredirect(True) komutu ile birlikte ekran minimize etme butonu eklemek

merhaba oluşturduğum pencere de exit ve şu simge boyutunda küçülttüğümüz widgetlarını root.overrideredirect(True) komutu ile kaldırdım sonradan kendim oluşturmayı denedim oluşturduğum buton için root.state('iconic') komutunu denedim ancak bu ikisinin birlikte kullanılmadığını öğrendim sonrasında stackoverflowda şöyle bir çözüm buldum sınıflı yapıyla yazılmış ancak bu benim için oldukça karmaşık daha kolay bir çözüm öneriniz var mı

try:
    from Tkinter import *
except ImportError:
    from tkinter import *

import time
import os

class Application(Frame):
    def __init__(self, parent):
       Frame.__init__(self,parent)
       self.pack(fill=BOTH)

       self.create_widgets()

    def create_widgets(self):
        self.borderFrame = Frame(self, width=500, height=600, bg="Gray")
        self.borderFrame.pack_propagate(False)
        self.borderFrame.pack(side=TOP)

        self.holderFrame = Frame(self.borderFrame, width=500, height=570, bg="blue")
        self.holderFrame.pack_propagate(False)
        self.holderFrame.pack(side=BOTTOM)

        self.close = Label(self, font=("Arial", 11), bg="Gray", anchor=CENTER, text="X", cursor="hand2")
        self.close.place(x=460, y=0, width=40, height=30)

        self.min = Label(self, font=("Arial", 11), bg="Gray", anchor=CENTER, text="_", cursor="hand2")
        self.min.place(x=420, y=0, width=40, height=30)

        def hoverMin(event):
            event.widget.config(bg="lightBlue")

        def unHoverMin(event):
            event.widget.config(bg="Gray")

        self.min.bind("<Enter>", hoverMin)
        self.min.bind("<Leave>", unHoverMin)
        self.min.bind("<Button-1>", self.minimize)

        def hover(event):
            event.widget.config(bg="red")

        def unhover(event):
            event.widget.config(bg="Gray")

        self.close.bind("<Enter>", hover)
        self.close.bind("<Leave>", unhover)
        self.close.bind("<Button-1>", self.exitProgram)

        self.borderFrame.bind("<Button-1>", self.startMove)
        self.borderFrame.bind("<ButtonRelease-1>", self.stopMove)
        self.borderFrame.bind("<B1-Motion>", self.moving)

        self.borderFrame.bind("<Map>",self.frame_mapped)

    def startMove(self, event):
        self.x = event.x
        self.y = event.y

    def stopMove(self, event):
        self.x = None
        self.y = None

    def moving(self,event):
        x = (event.x_root - self.x - self.borderFrame.winfo_rootx() + self.borderFrame.winfo_rootx())
        y = (event.y_root - self.y - self.borderFrame.winfo_rooty() + self.borderFrame.winfo_rooty())
        root.geometry("+%s+%s" % (x, y))

    def frame_mapped(self,e):
        print(self,e)
        root.update_idletasks()
        root.overrideredirect(True)
        root.state('normal')


    def minimize(self, event):
        root.update_idletasks()
        root.overrideredirect(False)
        #root.state('withdrawn')
        root.state('iconic')

    def exitProgram(self, event):
        os._exit(0)

root = Tk()
root.title("Draggable Root")
root.geometry("500x600")
root.overrideredirect(True)

app = Application(root)

root.mainloop()

Hepinize iyi çalışmalar

Merhabalar,aşağıdaki kod sizi çözüme ulaştıracaktır.

def kucult():
    root.iconify() 

simgeTusu = Button(text = "-", command = kucult)

İyi çalışmalar.

ne yazık ki bu komutu yazarsam şu hatayı alıyorum

TclError: can't iconify ".": override-redirect flag is set

Şöyle de yapabilirsiniz ama program bütün ekranı kaplar. Bu paylaştığınız kod da galiba Ubuntu kullandığım için çalışmadı.

#!/usr/bin/python3.8
# -*- coding: utf-8 -*-

import tkinter as tk

root = tk.Tk()
root.wm_attributes("-fullscreen", "true")

w, h = root.winfo_screenwidth(), root.winfo_screenheight()    

left_frame = tk.Frame(master=root, width=10/11 * w, height=25)
left_frame.grid(row=0, column=0)

right_frame = tk.Frame(master=root, width=1/11 * w, height=25)
right_frame.grid(row=0, column=1)

exit_frame = tk.Frame(
    master=right_frame, 
    width=1/22 * w, 
    height=25, 
    bg="orange"
)
exit_frame.pack(side="right")
exit_frame.pack_propagate(False)

minimize_frame = tk.Frame(
    master=right_frame, 
    width=1/22 * w, 
    height=25, 
    bg="grey"
)
minimize_frame.pack(side="right")
minimize_frame.pack_propagate(False)

exit_label = tk.Button(
    master=exit_frame, 
    text="X", 
    bg="orange",
    command=root.destroy
)
exit_label.pack(expand=True, fill="both")

minimize_label = tk.Button(
    master=minimize_frame, 
    text="-", 
    bg="grey",
    command=root.iconify
)
minimize_label.pack(expand=True, fill="both")

root.mainloop()

ne yazık ki tam ekran çalışmıyorum yine de çok teşekkür ederim yapmak istediğim şey en üstte belirttiğim kod aslında ama ben sınıflı yazamadığım için kendi programıma bir türlü entegre edemiyorum

try:
    from Tkinter import *
except ImportError:
    from tkinter import *


def frame_mapped(event):

    root.update_idletasks()
    root.overrideredirect(True)
    root.state('normal')

def minimize(event):
    root.update_idletasks()
    root.overrideredirect(False)
    # root.state('withdrawn')
    root.state('iconic')

def exitProgram(event):
    root.destroy()

root = Tk()
root.title("Draggable Root")
root.geometry("500x600")
root.overrideredirect(True)

borderFrame = Frame(root, width=500, height=600, bg="Gray")
borderFrame.pack_propagate(False)
borderFrame.pack(side=TOP)
borderFrame.bind("<Map>",frame_mapped)

holderFrame = Frame(borderFrame, width=500, height=570, bg="blue")
holderFrame.pack_propagate(False)
holderFrame.pack(side=BOTTOM)

close = Label(root, font=("Arial", 11), bg="Gray", anchor=CENTER, text="X", cursor="hand2")
close.place(x=460, y=0, width=40, height=30)
close.bind("<Button-1>", exitProgram)

min = Label(root, font=("Arial", 11), bg="Gray", anchor=CENTER, text="_", cursor="hand2")
min.place(x=420, y=0, width=40, height=30)
min.bind("<Button-1>", minimize)

root.mainloop()