Tkinter Fehler(weiß nicht warum)

Fragen zu Tkinter.
Antworten
Luca-Python
User
Beiträge: 4
Registriert: Donnerstag 25. Juli 2013, 08:43

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!!
Zuletzt geändert von Luca-Python am Donnerstag 25. Juli 2013, 11:32, insgesamt 3-mal geändert.
Ich bin neu, naund?!
Ich kann noch nicht soviel, naund?!
Ich lerne und es macht mir Spaß! :)
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.
Luca-Python
User
Beiträge: 4
Registriert: Donnerstag 25. Juli 2013, 08:43

Danke schön für deine Antwort.
Ich werde mal den Code überarbeiten mit hilf deiner Kritik.

Mit freundlichen Grüßen
Luca

(Besser?)
Zuletzt geändert von Luca-Python am Donnerstag 25. Juli 2013, 11:00, insgesamt 3-mal geändert.
Ich bin neu, naund?!
Ich kann noch nicht soviel, naund?!
Ich lerne und es macht mir Spaß! :)
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. :-(
Antworten