ubuntuusers.de

python + Tkinter: klassen-problem

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Affenkönig

Anmeldungsdatum:
14. Mai 2009

Beiträge: 36

Hi, ich bin gerade dabei Python zu lernen und hab ein problem. ich habe mehrere Klassen definiert: first, second und third. Ich möchte in der Klasse third das Entry "Eingabe" auslesen, das ich in der klasse "second" erstellt habe. Wie muss ich das entry übergeben, das es ausgelesen werden kann??

BodomBeachTerror

Anmeldungsdatum:
24. März 2008

Beiträge: 788

Ist jetzt schwer nachzuvollziehen so ohne Code Ausschnitt.

Aber wie wäre es wenn du es dem Konstruktor von third einfach übergibst.

Affenkönig

(Themenstarter)

Anmeldungsdatum:
14. Mai 2009

Beiträge: 36

wenn du die init(...) methode meinst: ich weiß nicht richtig wie ich es übergeben soll, also wie ich es eingeben soll. Ein kumpel wollte es mir schon erklären, musste dann aber weg und ich hab es auch nicht verstanden. Wenn jemand ne gute Anleitung kennt / mir geben kann fänd ich das echt toll und mir währe echt geholfen! (ich muss zugeben nichts richtiges gefunden zu haben

BodomBeachTerror

Anmeldungsdatum:
24. März 2008

Beiträge: 788

Ich probiers mal.

Also

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
class Second:
     def foo(self):
          x = third(self.entry) # Objekt der Klasse machen, und das Objekt übergeben

class Third:
     def __init__(self, entry)
          self.entry = entry # Objekt welches übergeben wurde für die ganze Klasse setzen

     def foo(self):
           text = self.entry.getText()

Hoffe mal das hilft dir weiter. Bin leider nicht so gut in python kann auch sein das da jetzt ein doofer Fehler drinnen ist, ich glaube aber nicht ;D

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11248

Wohnort: München

Du brauchst z.B. eine Funktion, die (hier im Beispiel beim Druck eines Buttons) eine Instanz der Klasse Third erstellt und den Inhalt des Eingabefeldes übergibt:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/python
# -*- coding:utf-8 -*-
import Tkinter

class Second(Tkinter.Frame):
  def __init__(self, master):
    Tkinter.Label(master, text="Eingabefeld:").grid(row=0)
    self.text = Tkinter.Entry(master)
    self.text.grid(row=0, column=1)
    self.klickme = Tkinter.Button(master, text='Übergebe an Third', 
      command=self.call_third).grid(row=1, column=0, columnspan=2)

  def call_third(self):
    print u"Aktuell im Eingabefeld: %s" %(self.text.get())
    third = Third(self.text.get())

class Third():
  def __init__(self, entry):
    print u"Third sagt: %s" %entry

  

if __name__ == "__main__":
  root = Tkinter.Tk()
  myGUI = Second(root)
  root.mainloop()

Das Beispiel sollte direkt lauffähig sein ☺

Affenkönig

(Themenstarter)

Anmeldungsdatum:
14. Mai 2009

Beiträge: 36

so also ich glaub es ist das beste wenn ich meinen text (gekürzt) poste:

root=Tk()
class second():	
	def __init__(self,master):		
		Eingabe=Entry(root)
		Eingabe.insert(0,'blaa')
		Eingabe.pack(side=RIGHT)


class third():
	def __init__(self,second,master):
                self.Eingabe=second.Eingabe
		m=Eingabe.get()
                def test():
			print m
		

so dann kommt der fehler: "class second has no atribute 'Eingabe'" ich hoffe jemand kann mir meinen Fehler zeigen

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11248

Wohnort: München

Du musst noch angeben, dass die "Variable" Eingabe nicht nur für die init-Funktion von second gelten soll, sondern für die ganze Klasse also versuch es mal mit self.Eingabe

Ferio Team-Icon

Avatar von Ferio

Anmeldungsdatum:
24. April 2007

Beiträge: Zähle...

Affenkönig schrieb:

so also ich glaub es ist das beste wenn ich meinen text (gekürzt) poste:

Kürz es beim nächsten Mal bitte so, dass man den Fehler per copy&paste nachvollziehen kann, so gibt das erstmal einen NameError: name 'Tk' is not defined. Außerdem hast du da noch einen Einrückungsfehler. Es ist auch nicht ersichtlich wie du third.__init__ aufrufst. Der Fehlermeldung zu Folge darf man raten, dass du eine Klasse übergeben hast, aber dein Code sieht so aus, als würdest du eine Instanz übergeben wollen.

PS: Hast du dir schonmal das Tutorial angeguckt?

Affenkönig

(Themenstarter)

Anmeldungsdatum:
14. Mai 2009

Beiträge: 36

also bei mir funktioniert es jetzt! Es gab ein problem wenn ich in der Klasse "second" die variable mit "self.Eingabe=Entry()" erstellt habe. Wenn ich sie mit "second.Eingabe=Entry()" erstellt habe konnte ich sie ohne probleme mit "second.Eingabe.get() auslesen"

Ich bedanke mich für die Hilfe und Mühe und hoffe das ich jetzt ohne Probleme voran komme 😉

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4673

Wohnort: Berlin

@Affenkönig: Das ist aber falsch. Jetzt hast Du das als *Klassenattribut* abgelegt und nicht an das Exemplar gebunden. Das ist unsauber. Du solltest vielleicht doch noch mal einen Schritt zurückgehen und die Grundlagen lernen und erst mit GUIs anfangen, wenn Du Klassen verstanden hast.

Antworten |