Forum: PC-Programmierung Frame wird nicht erkannt (Python3.0)


von Kev G. (kev_g)


Lesenswert?

Hey ich bin absoluter Neuling in Sachen Programmieren

Kann mir jemand sagen warum "Frame" nicht aufgerufen werden kann?


from tkinter import *


fenster = Tk()


fenster.geometry("700x350")
fenster.title("Sortiment verwalten")

fenster.mainloop()

rahmen = Frame (fenster, relief = "ridge", borderwidth = 5)
rahmen.pack(fill="both", expand = 1)

#button
button1 = Button(rahmen,text="Sortiment anzeigen", width = 20)
button1.config(font=("Arial", 12, "bold"))

_____________________________________________
tkinter.TclError: can't invoke "frame" command: application has been 
destroyed

von Jim M. (turboj)


Lesenswert?

Nach mainloop() findet nix mehr statt, das muss IIRC die letzte 
Anweisung sein.

Beitrag #6626689 wurde vom Autor gelöscht.
von Kev G. (kev_g)


Lesenswert?

Danke hat funktioniert ! :)

von Sheeva P. (sheevaplug)


Lesenswert?

Kev G. schrieb:
> Danke hat funktioniert ! :)

Tipp am Rande: in vielen Tutorials etc. werden Tkinter und Tix 
prozedural gezeigt, aber spätestens bei mittelgroßen Programmen führt 
das trotz Python unweigerlich in ein kaum wartbares Chaos.
1
#!/usr/bin/env python
2
import tkinter as T
3
4
class MainWin(T.Tk):
5
    def __init__(self, *args, **kwargs):
6
        T.Tk.__init__(self, *args, **kwargs)
7
        
8
        self.button = T.Button(self, text="Exit", command=self.destroy)
9
        self.button.pack(side=T.TOP)
10
        
11
        self.frame = T.Frame(self, relief='ridge', borderwidth=5)
12
        self.frame.pack(side=T.TOP, fill='both', expand=1)
13
14
if __name__ == '__main__':
15
    MainWin().mainloop()

Der Trick ist, daß Tkinter noch das veraltete OO-Interface hat und 
deswegen die Parent-Methoden nicht mit super() aufrufen kann. Deswegen 
geschieht das hier in Zeile 6 auf die alte Weise, also mit expliziter 
Angabe der Parent-Klasse und dem direkten Aufruf seiner Methode (hier: 
ihres Konstruktors), ansonsten funktioniert das alles ganz genau wie 
gewohnt.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.