Seite 1 von 1

Tkinter Fehler(weiß nicht warum)

Verfasst: Donnerstag 25. Juli 2013, 08:49
von Luca-Python
Hallo ich bin ziemlich neu in Python und finde halt noch nicht so viele Fehler und kriege es meistens noch nicht so hin.

Dieser Fehler kommt:

Form1=FormCreate(application)
TypeError: this constructor takes no arguments

Nun ich weiß nur irgent etwas fehlt aber was fehlt weiß ich nicht.

Hier kriegt ihr mal den code:

Code: Alles auswählen

#!/usr/bin/env python

from Tkinter import *

class FormCreate:

    def _init_(self,parent):

        panel1=Frame(parent,height=80,width=200)
        panel1.pack_propagate(0)
        panel1.pack()

        button1=Button(panel1,text="Exit",fg="blue",command=parent.quit,font=("System",20))
        button1.pack(side=Right,fill=BOTH,expand=1)

        button2=Button(panel1,text="Hello",command=self.sayHello,font=("System",20))
        button2.pack(side=LEFT,fill=BOTH,expand=1)

        panel2=Frame(parent,height=30,width=200)
        panel2.pack_propagate(0)
        panel2.pack()

        self.label1Caption=StringVar()
        label1=Label(panel2,textvariable=self.label1Caption,font=("System",16))
        label1.pack(side=BOTTOM)

    def sayHello(self):
        self.label1Caption.set("Hello World !")

##### Start ################
application=Tk()
application.title("Demo")
Form1=FormCreate(application)
application.mainloop()
Bitte um hilfe!!

Re: Tkinter Fehler(weiß nicht warum)

Verfasst: Donnerstag 25. Juli 2013, 09:20
von BlackJack
@Luca-Python: Die „magischen” Methoden haben *zwei* führende und abschliessende Unterstriche.

Ansonsten könntest Du mal einen Blick in den Style Guide for Python Code werfen, insbesondere was die schreibweise der Namen angeht.

Sternchenimporte sollte man vermeiden. Im Falle von `Tkinter` holt man sich damit mal eben knapp 200 Namen in das aktuelle Modul. Üblich ist ein ``import Tkinter as tk`` und dann Zugriff über den Namen `tk` auf die Objekte in dem Modul.

`FormCreate` ist ein Name der zu einer Funktion passen würde, aber nicht zu einer Klasse. Funktionen und Methoden werden normalerweise nach Tätigkeiten benannt, denn die tun etwas, und Klassen nach Dingen im weitesten Sinne, denn die repräsentieren ein Ding, ein Konzept, … — auf jeden Fall ein Hauptwort.

`pack()` innerhalb des selben Containerwidgets sollte immer die gleiche `side` benutzen. Sonst können interessante Sachen passieren, bis hin zu einer Endlosschleife im Layout-Manager. Bei den Buttons würde ich mir zum Beispiel nicht zutrauen vorherzusagen wie die letztendlich dargestellt werden, und ob das auf jeder Plattform gleich aussehen wird. Die `pack_propagate()`-Aufrufe halte ich auch für keine gute Idee, denn letztendlich versucht man damit absolute Grössen vorzugeben, was gut gehen kann — aber halt nicht muss.

Namen zu nummerieren ist in der Regel ein „code smell”. Entweder war man zu faul sich vernünftige, passende Namen auszudenken, oder man möchte eigentlich eine Datenstruktur verwenden. Meistens eine Liste.

Re: Tkinter Fehler(weiß nicht warum)

Verfasst: Donnerstag 25. Juli 2013, 09:25
von Luca-Python
Danke schön für deine Antwort.
Ich werde mal den Code überarbeiten mit hilf deiner Kritik.

Mit freundlichen Grüßen
Luca

(Besser?)

Re: Tkinter Fehler(weiß nicht warum)

Verfasst: Donnerstag 25. Juli 2013, 10:52
von BlackJack
@Luca-Python: Ähm, der Satz ist irgendwie kein syntaktisch korrektes Deutsch und zwar so weit, dass ich nicht mal raten kann was er bedeuten soll. :-(