Seite 1 von 1

Gui aus anderer Datei bedienen?

Verfasst: Sonntag 6. Juni 2010, 20:45
von MQuadrat
Hey,

Ich habe noch nicht so viel Ahnung von Python und möchte nun ein kleines Programm mit Tkinter schreiben und man soll ja immer Grafik und Logik von einander trennen, nur damit tue ich mich im Moment noch schwer:

Also ich habe 2 Dateien, eine heißt "Logik", mit dem ich erreichen will, dass ein Label den Text ausgibt, falls eine der Textboxen leer sind.

Code: Alles auswählen

import sys
import Rechnung
import GUI


def Hinzufuegen():

    #Prüfen, ob Textboxen leer sind:
    if not GUI.EntryName.get() or not GUI.EntryDurchmesser.get() or not GUI.EntryLaenge.get():

        labelInfo["Text"] = "Bitte alle Textboxen ausf\xfcllen"

Hier die Tkinter Datei:

Code: Alles auswählen

import sys
import tkinter
import Logik


#Hauptfenster

hauptfenster = tkinter.Tk()
hauptfenster.resizable(width=False, height=False)
hauptfenster.geometry("300x350")


labelInfo = tkinter.Label(hauptfenster)
labelInfo.place(relx = 0.1, rely = 0.9)



#Textboxen

EntryName = tkinter.Entry(hauptfenster)
EntryName.place(relx= 0.5, rely=0.1, anchor ="nw")

EntryDurchmesser = tkinter.Entry(hauptfenster)
EntryDurchmesser.place(relx= 0.5, rely=0.2, anchor ="nw")

EntryLaenge = tkinter.Entry(hauptfenster)
EntryLaenge.place(relx= 0.5, rely=0.3, anchor ="nw")



#Buttons

buttonHinzufuegen = tkinter.Button(hauptfenster, text = "Hinzuf\xfcgen", command = Logik.Hinzufuegen)
buttonHinzufuegen.place(relx = 0.1, rely = 0.7, anchor = "nw")




#Endlosschleife

hauptfenster.mainloop()

Nun bekomme ich beim Klicken auf den Button Hinzufügen folgenden Fehler, mit dem ich nicht so recht etwas anfangen kann:

Code: Alles auswählen

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python31\lib\tkinter\__init__.py", line 1399, in __call__
    return self.func(*args)
  File "C:/Users/Marco/Desktop/Python/KK_Rechner\Logik.py", line 16, in Hinzufuegen
    labelInfo["Text"] = "Bitte alle Textboxen ausf\xfcllen"
NameError: global name 'labelInfo' is not defined
Was mache ich falsch?

Re: Gui aus anderer Datei bedienen?

Verfasst: Sonntag 6. Juni 2010, 21:37
von BlackJack
@MQuadrat: Die Fehlermeldung sagts doch eigentlich: Der Name ist nicht definiert. In dem Modul gibt es ihn nicht.

Und wenn Du Logik und GUI trennen möchtest, dann sollte die Logik keine Labels füllen wollen, denn Labels sind ja wohl eindeutig GUI.

Ausserdem sollten sich Module nicht gegenseitig importieren. Da kommt oft nicht das bei heraus was man sich denkt. Wenn so eine Beziehung besteht sind die Inhalte nicht entkoppelt genug.

Auf Modulebene sollte möglichst kein Code stehen. `place()` sollte man nicht verwenden, auch nicht mit relativen Koordinaten. Und vielleicht solltest Du erst einmal objektorientierte Programmierung studieren, bevor Du mit GUI-Programmierung weitermachst.

Danach dann vielleicht die komplette Programmlogik ohne GUI implementieren und testen und *dann* erst eine GUI da draufsetzen.

Re: Gui aus anderer Datei bedienen?

Verfasst: Montag 7. Juni 2010, 12:36
von numerix
MQuadrat hat geschrieben:man soll ja immer Grafik und Logik von einander trennen
Möglicherweise hast du das missverstanden: Es geht hier nicht notwendigerweise um eine physikalische Trennung (separate Module/Dateien), sondern um eine logische Trennung. Dabei kann Programmlogik und GUI durchaus in einer Datei/Modul zusammengefasst werden.

Re: Gui aus anderer Datei bedienen?

Verfasst: Montag 7. Juni 2010, 13:00
von cofi
BlackJack hat geschrieben:Und wenn Du Logik und GUI trennen möchtest, dann sollte die Logik keine Labels füllen wollen, denn Labels sind ja wohl eindeutig GUI.
Ums mal deutlicher zu sagen: Deine Logik ist keine Logik, sondern Teil der GUI.

Und einen Blick in PEP8 solltest du vielleicht auch mal werfen.