GRID-LAYOUT

Das Layout mit dem “pack”-Mechanismus ist nicht immer leicht zu verstehen. Deshalb gibt es seit Jahren einen Nachfolger: das Grid-Layout.

Beachte:
Einmal Grid-Layout immer Grid-Layout!




Structure

The structure of a grid-dialog are different than a pack-dialog:

import tkinter

class MyApp():

def __init__(self, root):
- root.config(bg="yellow")
- self.setGUI()

def setGUI(self):
- # create your ui-elements
- pass

root = tkinter.Tk()
root.title("Mein Fenster")
root.geometry("300x300")
app = MyApp(root)
root.mainloop()

New:
The reference of the main-dialog „root“ are given to the class within a parameter.
If you create an ui-element, you have to use "root" not "self" as prefix.
For a call for an implemented actions of python, you use "root":
- self.bnOk["command"] = root.quit
For an own action method, you use "self":
- self.bnAction["command"] = self.onActiondef onAction(self):
- self.var_name.set( self.var_name.get()[::-1] )
- messagebox.showinfo( "Hello Python", "Hello World") # from tkinter import messagebox

Instead of a call of „pack“, you must call ?.grid(…)
- .grid(row=0, column=0, columnspan=3, padx="10",pady="10")
- row
- col
- columnspan
- rowspan

The number of columns and rows are calculated.

If you want to fill the rows or columns, you need:
- root.rowconfigure(rownr, weight=1)
- root.columnconfigure(colnr, weight=1)
- don't forget sticky="NSEW", without sticky, the cell are expanded, but not the ui-element
- self.inputui.grid(row=0, column=1,sticky="NSEW",padx="10",pady="10")




1. Beispiel
import tkinter
from tkinter import messagebox

class MyApp():

  def __init__(self, root):
    root.config(bg="yellow")
    self.setGUI()

  def setGUI(self):		
    n=5
    for rownr in range(0,n,1):
      for colnr in range(0,n,1):
        bn = tkinter.Button(root)
        bn["text"] = str(rownr)+' / '+str(colnr)
        #bn.grid(row=0, column=0, padx="10",pady="10")
        bn.grid(row=rownr, column=colnr, padx="10",pady="10")
        bn.config(foreground = "blue" )
        bn.config(background = "red") #"#FF0000"

root = tkinter.Tk()
root.title("Mein Fenster")
root.geometry("300x300")
app = MyApp(root)
root.mainloop()


Ergebnis des 1. Beispiels



1. Beispiel (new version)
import tkinter
from tkinter import messagebox

class MyApp():

  def __init__(self, root):
    root.config(bg="yellow")
    self.setGUI()

  def setGUI(self):    
    n=5
    for i in range(0,n,1):
      root.rowconfigure(i, weight=1)  # setzt die 1. Spalte auf fill
      root.columnconfigure(i, weight=1)  # 1. editor fill


    for rownr in range(0,n,1):
      for colnr in range(0,n,1):
        bn = tkinter.Button(root)
        bn["text"] = str(rownr)+' / '+str(colnr)
        bn.grid(row=rownr, column=colnr,sticky="NSEW", padx="10",pady="10")
        bn.config(foreground = "blue" )
        bn.config(background = "red") #"#FF0000"


root = tkinter.Tk()
root.title("Mein Fenster")
root.geometry("300x300")
app = MyApp(root)
root.mainloop()


Ergebnis der 1. Beispiels nach der Modifikation

1. Beispiel (new version, different columnweight)
import tkinter
from tkinter import messagebox

class MyApp():

  def __init__(self, root):
    root.config(bg="yellow")
    self.setGUI()

  def setGUI(self):    
    n=5
    for i in range(0,n,1):
      root.rowconfigure(i, weight=1)  # setzt die 1. Spalte auf fill
      root.columnconfigure(i, weight=i+1)  # 1. editor fill


    for rownr in range(0,n,1):
      for colnr in range(0,n,1):
        bn = tkinter.Button(root)
        bn["text"] = str(rownr)+' / '+str(colnr)
        bn.grid(row=rownr, column=colnr,sticky="NSEW", padx="10",pady="10")
        bn.config(foreground = "blue" )
        bn.config(background = "red") #"#FF0000"


root = tkinter.Tk()
root.title("Mein Fenster")
root.geometry("300x300")
app = MyApp(root)
root.mainloop()


Ergebnis der 1. Beispiels nach der Modifikation

1. Beispiel (new version, different columnweight)
import tkinter
from tkinter import messagebox

class MyApp():

  def __init__(self, root):
    root.config(bg="yellow")
    self.setGUI()

  def setGUI(self):    
    n=5
    for i in range(0,n,1):
      root.rowconfigure(i, weight=i+1)  # setzt die 1. Spalte auf fill
      root.columnconfigure(i, weight=1)  # 1. editor fill


    for rownr in range(0,n,1):
      for colnr in range(0,n,1):
        bn = tkinter.Button(root)
        bn["text"] = str(rownr)+' / '+str(colnr)
        bn.grid(row=rownr, column=colnr,sticky="NSEW", padx="10",pady="10")
        bn.config(foreground = "blue" )
        bn.config(background = "red") #"#FF0000"


root = tkinter.Tk()
root.title("Mein Fenster")
root.geometry("300x300")
app = MyApp(root)
root.mainloop()


Ergebnis der 1. Beispiels nach der Modifikation


2. Beispiel
import tkinter
from tkinter import messagebox

class MyApp():

  def __init__(self, root):
    root.config(bg="yellow")
    self.setGUI()

  def setGUI(self):    

    self.label1 = tkinter.Label(root)
    self.label1["text"] = "Eingabe"
    self.label1.config(foreground = "blue" )
    self.label1.config(background = "red") #"#FF0000"
    self.label1.grid(row=0, column=0, padx="10",pady="10")
    #self.label1.grid(row=0, columnspan=0, padx="10",pady="10")



    self.inputui = tkinter.Entry(root, background="blue", foreground="yellow", relief=tkinter.SUNKEN)
    self.inputui.grid(row=0, column=1,sticky="ew",padx="10",pady="10")

    self.var_name = tkinter.StringVar()
    self.var_name.set("Ihr Name...")
    self.inputui["textvariable"] = self.var_name

# ------------------------------------------

    self.bnRev = tkinter.Button(root)
    self.bnRev["text"] = "Umdrehen"
    self.bnRev["command"] = self.onReverse
    self.bnRev.grid(row=1, column=0, padx="10",pady="10")

    self.bnOk = tkinter.Button(root)
    self.bnOk["text"] = "Ok"
    self.bnOk["command"] = root.quit
    self.bnOk.grid(row=1, column=1, padx="10",pady="10")

# ------------------------------------------

  def onReverse(self):
    self.var_name.set( self.var_name.get()[::-1] )
    messagebox.showinfo( "Hello Python", "Hello World")



root = tkinter.Tk()
root.title("Mein Fenster")
root.geometry("250x150")
app = MyApp(root)
root.mainloop()



Ergebnis des 2. Beispiels



Ergebnis des 2. Beispiels Das Textfeld "wandert" nicht mit, siehe 3. Beispiel


3. Beispiel
import tkinter

from tkinter import messagebox


class MyApp():

  def __init__(self, root):
    root.config(bg="yellow")
    self.setGUI()

  def setGUI(self):
    root.columnconfigure(1, weight=1)  # setzt die 1. Spalte auf fill

    self.label1 = tkinter.Label(root)
    self.label1["text"] = "Eingabe"
    self.label1.config(foreground = "blue" )
    self.label1.config(background = "red") 
    self.label1.grid(row=0, column=0, padx="10",pady="10")

    self.inputui = tkinter.Entry(root, background = "white", relief=tkinter.SUNKEN)
    self.inputui.grid(row=0, column=1,sticky="NSEW",padx="10",pady="10")

    self.var_name = tkinter.StringVar()
    self.var_name.set("Ihr Name...")
    self.inputui["textvariable"] = self.var_name

# ------------------------------------------

    buttonframe = tkinter.Frame(root)
    buttonframe.config(background = "blue") #"#FF0000"
    buttonframe.grid(row=1, column=0, columnspan=2, padx="10",pady="10")


    self.bnAction = tkinter.Button(buttonframe)
    self.bnAction["text"] = "Umdrehen"
    self.bnAction["command"] = self.onReverse
    self.bnAction.grid(row=0, column=0, padx="10",pady="10")

    self.bnOk = tkinter.Button(buttonframe)
    self.bnOk["text"] = "Ok"
    self.bnOk["command"] = root.quit
    self.bnOk.grid(row=0, column=1, padx="10",pady="10")

# ------------------------------------------

  def onReverse(self):
    self.var_name.set( self.var_name.get()[::-1] )
    messagebox.showinfo( "Hello Python", "Hello World")



root = tkinter.Tk()
root.title("Mein Fenster")
root.geometry("250x150")
app = MyApp(root)
root.mainloop()



Ergebnis des 3. Beispiels



Ergebnis des 3. Beispiels


4. Beispiel
import tkinter

from tkinter import messagebox


class MyApp():

  def __init__(self, root):
    root.config(bg="yellow")
    self.setGUI()

  def setGUI(self):
    root.columnconfigure(1, weight=3)  # setzt die 1. Spalte auf fill
    root.columnconfigure(2, weight=1)  # setzt die 2. Spalte auf fill

    self.label1 = tkinter.Label(root)
    self.label1["text"] = "Eingabe"
    self.label1.config(foreground = "blue" )
    self.label1.config(background = "red") 
    self.label1.grid(row=0, column=0, sticky="W", padx="10",pady="10")

    self.inputui1 = tkinter.Entry(root, background = "white", relief=tkinter.SUNKEN)
    self.inputui1.grid(row=0, column=1,sticky="NSEW",padx="10",pady="10")
    self.var_name1 = tkinter.StringVar()
    self.var_name1.set("Ihr Nachname...")
    self.inputui1["textvariable"] = self.var_name1

    self.inputui2 = tkinter.Entry(root, background = "white", relief=tkinter.SUNKEN)
    self.inputui2.grid(row=0, column=2,sticky="NSEW",padx="10",pady="10")
    self.var_name2 = tkinter.StringVar()
    self.var_name2.set("Ihr Vorname...")
    self.inputui2["textvariable"] = self.var_name2

#-------------------------------------------

    self.label3 = tkinter.Label(root)
    self.label3["text"] = "Straße"
    self.label3.config(foreground = "blue" )
    self.label3.config(background = "red") 
    self.label3.grid(row=1, column=0,sticky="W", padx="10",pady="10")

    self.inputui3 = tkinter.Entry(root, background = "white", relief=tkinter.SUNKEN)
    self.inputui3.grid(row=1, column=1, columnspan=2,sticky="NSEW", padx="10",pady="10")
    self.var_name3 = tkinter.StringVar()
    self.var_name3.set("Strasse...")
    self.inputui3["textvariable"] = self.var_name3


# ------------------------------------------

    buttonframe = tkinter.Frame(root)
    buttonframe.config(background = "blue") #"#FF0000"
    buttonframe.grid(row=2, column=0, columnspan=3, padx="10",pady="10")


    self.bnAction = tkinter.Button(buttonframe)
    self.bnAction["text"] = "Umdrehen"
    self.bnAction["command"] = self.onReverse
    self.bnAction.grid(row=0, column=0, padx="10",pady="10")

    self.bnOk = tkinter.Button(buttonframe)
    self.bnOk["text"] = "Ok"
    self.bnOk["command"] = root.quit
    self.bnOk.grid(row=0, column=1, padx="10",pady="10")

# ------------------------------------------

  def onReverse(self):
    self.var_name1.set( self.var_name1.get()[::-1] )
    #messagebox.showinfo( "Hello Python", "Hello World")



root = tkinter.Tk()
root.title("Mein Fenster")
root.geometry("350x150")
app = MyApp(root)
root.mainloop()



Ergebnis des 4. Beispiels


5. Beispiel
import tkinter

from tkinter import messagebox


class MyApp():

  def __init__(self, root):
    root.config(bg="yellow")
    self.setGUI()

  def setGUI(self):
    root.columnconfigure(1, weight=3)  # setzt die 1. Spalte auf fill
    root.columnconfigure(2, weight=1)  # setzt die 1. Spalte auf fill
    root.rowconfigure(2, weight=1)  # editor fill

    self.label1 = tkinter.Label(root)
    self.label1["text"] = "Eingabe"
    self.label1.config(foreground = "blue" )
    self.label1.config(background = "red") 
    self.label1.grid(row=0, column=0, sticky="W", padx="10",pady="10")

    self.inputui1 = tkinter.Entry(root, background = "white", relief=tkinter.SUNKEN)
    self.inputui1.grid(row=0, column=1,sticky="NSEW",padx="10",pady="10")
    self.var_name1 = tkinter.StringVar()
    self.var_name1.set("Ihr Nachname...")
    self.inputui1["textvariable"] = self.var_name1

    self.inputui2 = tkinter.Entry(root, background = "white", relief=tkinter.SUNKEN)
    self.inputui2.grid(row=0, column=2, columnspan=2,sticky="NSEW",padx="10",pady="10")
    self.var_name2 = tkinter.StringVar()
    self.var_name2.set("Ihr Vorname...")
    self.inputui2["textvariable"] = self.var_name2

#-------------------------------------------

    self.label3 = tkinter.Label(root)
    self.label3["text"] = "Straße"
    self.label3.config(foreground = "blue" )
    self.label3.config(background = "red") 
    self.label3.grid(row=1, column=0, sticky="W",  padx="10",pady="10")

    self.inputui3 = tkinter.Entry(root, background = "white", relief=tkinter.SUNKEN)
    self.inputui3.grid(row=1, column=1, columnspan=3, sticky="NSEW",padx="10",pady="10")
    self.var_name3 = tkinter.StringVar()
    self.var_name3.set("Strasse...")
    self.inputui3["textvariable"] = self.var_name3

# -------------------------------------------




    self.editor = tkinter.Text(root)
    self.editor.config(wrap="none")  # wrap="word"  word char 
    self.editor.grid(row=2, column=0,columnspan=3, sticky="NSEW",  padx="0",pady="0")

    sbx = tkinter.Scrollbar(root, orient="horizontal")
    sbx.grid(row=3, column=0,columnspan=4, sticky="NSEW",pady="0")

    sby = tkinter.Scrollbar(root)
    sby.grid(row=2, column=3,columnspan=1, sticky="NSEW",pady="0")

    self.editor["xscrollcommand"] = sbx.set
    sbx["command"] = self.editor.xview
    self.editor["yscrollcommand"] = sby.set
    sby["command"] = self.editor.yview


# ------------------------------------------

    buttonframe = tkinter.Frame(root)
    buttonframe.config(background = "blue") #"#FF0000"
    buttonframe.grid(row=4, column=0, columnspan=3, padx="10",pady="10")


    self.bnAction = tkinter.Button(buttonframe)
    self.bnAction["text"] = "Umdrehen"
    self.bnAction["command"] = self.onReverse
    self.bnAction.grid(row=0, column=0, padx="10",pady="10")

    self.bnOk = tkinter.Button(buttonframe)
    self.bnOk["text"] = "Ok"
    self.bnOk["command"] = root.quit
    self.bnOk.grid(row=0, column=1, padx="10",pady="10")

# ------------------------------------------

  def onReverse(self):
    self.var_name1.set( self.var_name1.get()[::-1] )
    #messagebox.showinfo( "Hello Python", "Hello World")



root = tkinter.Tk()
root.title("Mein Fenster")
root.geometry("550x400")
app = MyApp(root)
root.mainloop()



Ergebnis des 5. Beispiels


6. Beispiel
import tkinter

from tkinter import messagebox

#https://www.tutorialspoint.com/python/python_gui_programming.htm

class MyApp():

  def __init__(self, root):
    root.config(bg="yellow")
    self.setGUI()

  def setGUI(self):
    root.columnconfigure(1, weight=3)  # setzt die 1. Spalte auf fill
    root.columnconfigure(2, weight=1)  # setzt die 1. Spalte auf fill
    root.rowconfigure(2, weight=1)  # 1. editor fill
    root.rowconfigure(4, weight=10)  # 2. editor fill

    self.label1 = tkinter.Label(root)
    self.label1["text"] = "Eingabe"
    self.label1.config(foreground = "blue" )
    self.label1.config(background = "red") 
    self.label1.grid(row=0, column=0, sticky="W", padx="10",pady="10")

    self.inputui1 = tkinter.Entry(root, background = "white", relief=tkinter.SUNKEN)
    self.inputui1.grid(row=0, column=1,sticky="NSEW",padx="10",pady="10")
    self.var_name1 = tkinter.StringVar()
    self.var_name1.set("Ihr Nachname...")
    self.inputui1["textvariable"] = self.var_name1

    self.inputui2 = tkinter.Entry(root, background = "white", relief=tkinter.SUNKEN)
    self.inputui2.grid(row=0, column=2, columnspan=2,sticky="NSEW",padx="10",pady="10")
    self.var_name2 = tkinter.StringVar()
    self.var_name2.set("Ihr Vorname...")
    self.inputui2["textvariable"] = self.var_name2

#-------------------------------------------

    self.label3 = tkinter.Label(root)
    self.label3["text"] = "Straße"
    self.label3.config(foreground = "blue" )
    self.label3.config(background = "red") 
    self.label3.grid(row=1, column=0, sticky="W",  padx="10",pady="10")

    self.inputui3 = tkinter.Entry(root, background = "white", relief=tkinter.SUNKEN)
    self.inputui3.grid(row=1, column=1, columnspan=3, sticky="NSEW",padx="10",pady="10")
    self.var_name3 = tkinter.StringVar()
    self.var_name3.set("Strasse...")
    self.inputui3["textvariable"] = self.var_name3

# -------------------------------------------


    self.editor1 = tkinter.Text(root)
    self.editor1.config(wrap="none")  # wrap="word"  word char 
    self.editor1.grid(row=2, column=0,columnspan=3, sticky="NSEW",  padx="0",pady="0")

    sbx1 = tkinter.Scrollbar(root, orient="horizontal")
    sbx1.grid(row=3, column=0,columnspan=4, sticky="NSEW",padx="20", pady="0")

    sby1 = tkinter.Scrollbar(root)
    sby1.grid(row=2, column=3,columnspan=1, sticky="NSEW",pady="0")

    self.editor1["xscrollcommand"] = sbx1.set
    sbx1["command"] = self.editor1.xview
    self.editor1["yscrollcommand"] = sby1.set
    sby1["command"] = self.editor1.yview

# -------------------------------------------

    self.editor2 = tkinter.Text(root)
    self.editor2.config(wrap="none")  # wrap="word"  word char 
    self.editor2.grid(row=4, column=0,columnspan=3, sticky="NSEW",  padx="0",pady="0")

    sbx2 = tkinter.Scrollbar(root, orient="horizontal")
    sbx2.grid(row=5, column=0,columnspan=4, sticky="NSEW", padx="20",pady="0")

    sby2 = tkinter.Scrollbar(root)
    sby2.grid(row=4, column=3,columnspan=1, sticky="NSEW",pady="0")

    self.editor2["xscrollcommand"] = sbx2.set
    sbx2["command"] = self.editor2.xview
    self.editor2["yscrollcommand"] = sby2.set
    sby2["command"] = self.editor2.yview


# ------------------------------------------

    buttonframe = tkinter.Frame(root)
    buttonframe.config(background = "blue") #"#FF0000"
    buttonframe.grid(row=6, column=0, columnspan=3, padx="10",pady="10")


    self.bnAction = tkinter.Button(buttonframe)
    self.bnAction["text"] = "Umdrehen"
    self.bnAction["command"] = self.onReverse
    self.bnAction.grid(row=0, column=0, padx="10",pady="10")

    self.bnOk = tkinter.Button(buttonframe)
    self.bnOk["text"] = "Ok"
    self.bnOk["command"] = root.quit
    self.bnOk.grid(row=0, column=1, padx="10",pady="10")

# ------------------------------------------

  def onReverse(self):
    self.var_name1.set( self.var_name1.get()[::-1] )
    #messagebox.showinfo( "Hello Python", "Hello World")



root = tkinter.Tk()
root.title("Mein Fenster")
root.geometry("550x700")
app = MyApp(root)
root.mainloop()


Ergebnis des 6. Beispiels


7. Beispiel
import tkinter

from tkinter import messagebox

#https://www.tutorialspoint.com/python/python_gui_programming.htm

class MyApp():

  def __init__(self, root):
    root.config(bg="yellow")
    self.setGUI()

  def setGUI(self):
    # Columns:  auto    weight=3   weight=1  auto  weight=1  auto
    #                      editor      
    root.columnconfigure(1, weight=3)  # setzt die 1. Spalte auf fill
    root.columnconfigure(2, weight=1)  # setzt die 1. Spalte auf fill
    root.rowconfigure(2, weight=1)  # 1. editor fill

    self.label1 = tkinter.Label(root)
    self.label1["text"] = "Eingabe"
    self.label1.config(foreground = "blue" )
    self.label1.config(background = "red") 
    self.label1.grid(row=0, column=0, sticky="W", padx="10",pady="10")

    self.inputui1 = tkinter.Entry(root, background = "white", relief=tkinter.SUNKEN)
    self.inputui1.grid(row=0, column=1,sticky="NSEW",padx="10",pady="10")
    self.var_name1 = tkinter.StringVar()
    self.var_name1.set("Ihr Nachname...")
    self.inputui1["textvariable"] = self.var_name1

    self.inputui2 = tkinter.Entry(root, background = "white", relief=tkinter.SUNKEN)
    self.inputui2.grid(row=0, column=2, columnspan=2,sticky="NSEW",padx="10",pady="10")
    self.var_name2 = tkinter.StringVar()
    self.var_name2.set("Ihr Vorname...")
    self.inputui2["textvariable"] = self.var_name2

#-------------------------------------------

    self.label3 = tkinter.Label(root)
    self.label3["text"] = "Straße"
    self.label3.config(foreground = "blue" )
    self.label3.config(background = "red") 
    self.label3.grid(row=1, column=0, sticky="W",  padx="10",pady="10")

    self.inputui3 = tkinter.Entry(root, background = "white", relief=tkinter.SUNKEN)
    self.inputui3.grid(row=1, column=1, columnspan=3, sticky="NSEW",padx="10",pady="10")
    self.var_name3 = tkinter.StringVar()
    self.var_name3.set("Strasse...")
    self.inputui3["textvariable"] = self.var_name3

# -------------------------------------------

    editorframe = tkinter.Frame(root)
    editorframe.config(background = "#00FF44") #"#FF0000"
    editorframe.grid(row=2, column=0, columnspan=3,sticky="NSEW", padx="10",pady="10")
    editorframe.columnconfigure(0, weight=1)  # setzt die 1. Spalte auf fill
    editorframe.columnconfigure(2, weight=1)  # setzt die 1. Spalte auf fill
    editorframe.rowconfigure(0, weight=1)  # 1. editor fill



    self.editor1 = tkinter.Text(editorframe)
    self.editor1.config(wrap="none")  # wrap="word"  word char 
    self.editor1.grid(row=0, column=0, sticky="NSEW",  padx="0",pady="0")

    sby1 = tkinter.Scrollbar(editorframe)
    sby1.grid(row=0, column=1, sticky="NSEW",pady="0")

    sbx1 = tkinter.Scrollbar(editorframe, orient="horizontal")
    sbx1.grid(row=1, column=0, columnspan=2, sticky="NSEW",padx="20", pady="0")


    self.editor1["xscrollcommand"] = sbx1.set
    sbx1["command"] = self.editor1.xview
    self.editor1["yscrollcommand"] = sby1.set
    sby1["command"] = self.editor1.yview

# -------------------------------------------

    self.editor2 = tkinter.Text(editorframe)
    self.editor2.config(wrap="none")  # wrap="word"  word char 
    self.editor2.grid(row=0, column=2, sticky="NSEW",  padx="0",pady="0")

    sby2 = tkinter.Scrollbar(editorframe)
    sby2.grid(row=0, column=3,columnspan=1, sticky="NSEW",pady="0")

    sbx2 = tkinter.Scrollbar(editorframe, orient="horizontal")
    sbx2.grid(row=1, column=2,columnspan=2, sticky="NSEW",padx="20", pady="0")


    self.editor2["xscrollcommand"] = sbx2.set
    sbx2["command"] = self.editor2.xview
    self.editor1["yscrollcommand"] = sby2.set
    sby2["command"] = self.editor2.yview


# ------------------------------------------

    buttonframe = tkinter.Frame(root)
    buttonframe.config(background = "blue") #"#FF0000"
    buttonframe.grid(row=6, column=0, columnspan=3, padx="10",pady="10")


    self.bnAction = tkinter.Button(buttonframe)
    self.bnAction["text"] = "Umdrehen"
    self.bnAction["command"] = self.onReverse
    self.bnAction.grid(row=0, column=0, padx="10",pady="10")

    self.bnOk = tkinter.Button(buttonframe)
    self.bnOk["text"] = "Ok"
    self.bnOk["command"] = root.quit
    self.bnOk.grid(row=0, column=1, padx="10",pady="10")

# ------------------------------------------

  def onReverse(self):
    self.var_name1.set( self.var_name1.get()[::-1] )
    #messagebox.showinfo( "Hello Python", "Hello World")



root = tkinter.Tk()
root.title("Mein Fenster")
root.geometry("850x400")
app = MyApp(root)
root.mainloop()


Ergebnis des 7. Beispiels


savedialog
Standard Rahmen