Seite 1 von 1

Problem und Fragen mit Tkinter (erstes Programm)

Verfasst: Sonntag 5. September 2004, 12:57
von ShadowFreak
Hi,

ich bins ma wieder. :oops: :oops:

Also hab ne Menge Fragen:

1. Wie krig ich den Dialog im ein Fenster. (Aus den Tut's die ich hab werd ich net schlau.
2. Wieso funtzten die Variablen net (antw1,antw2). Da kommt immer das sie net definiert seien.
3. wie krig ich ich das ich eine Button 2 commands zuweiße. z.b. hier: Read_it und quit. Sodas die Antwort gelesen wird und das Fenster geschloßen. (Probt ma mein Script, dann wist ihr was ich mein)

Hier is was ich hab:

Code: Alles auswählen

# -*- coding: cp1252 -*-
from Tkinter import *


def evClear():
  eHello.delete(0,END)
def read_it():
    antw1 = eHello.get() #1.Variable
    print antw1


top = Tk()
F = Frame(top)
F.pack(expand="true")



lHello = Label(F, text="Wie heist du ??")
lHello.pack()
fEntry = Frame(F, border="6")
eHello = Entry(fEntry)
fEntry.pack(side="top", expand="true")
eHello.pack(side="left", expand="true")


fButtons = Frame(F, relief="sunken", border=1)
bClear = Button(fButtons, text="Enter", command=read_it)
bClear.pack(side="left", padx=5, pady=2)
bQuit = Button(fButtons, text="Next", command=F.quit)
bQuit.pack(side="left", padx=5, pady=2)
fButtons.pack(side="top", expand="true")


F.mainloop()

#------------------------------------------------------------------------------


from Tkinter import *


def evClear():
  eHello.delete(0,END)
def read_it():
    antw2 = eHello.get() #2. Variable
    print antw2


top = Tk()
F = Frame(top)
F.pack(expand="true")


lHello = Label(F, text="Was machst du ??")
lHello.pack()
fEntry = Frame(F, border="1")
eHello = Entry(fEntry)
fEntry.pack(side="top", expand="true")
eHello.pack(side="left", expand="true")


fButtons = Frame(F, relief="sunken", border=1)
bClear = Button(fButtons, text="Enter", command=read_it)
bClear.pack(side="left", padx=5, pady=2)
bQuit = Button(fButtons, text="Next", command=F.quit)
bQuit.pack(side="left", padx=5, pady=2)
fButtons.pack(side="top", expand="true")


F.mainloop()


#------------------------------------------------------------------------------


from Tkinter import *


top = Tk()
F = Frame(top)
F.pack()


lHello = Label(F, text="Also du heist %s und verbringst den TAg mit %s" % (antw1,antw2)) # Hier is das Prob mit den Variablen
lHello.pack()
bQuit = Button(F, text="Quit", command=F.quit)
bQuit.pack()


top.mainloop()
Ich hoffe ihr könnt mir helfen.



Danke schonma im Vorraus :mrgreen: :mrgreen:


Mfg ShadowFreak

Verfasst: Sonntag 5. September 2004, 14:19
von mawe
Hi!

Erstens: Einmal from Tkinter import * im Script reicht vollkommen :wink:
ShadowFreak hat geschrieben: Wieso funtzten die Variablen net (antw1,antw2). Da kommt immer das sie net definiert seien.
Die sind lokal, d.h. nur in den read_it() Subroutinen sichtbar. Übersichtlicher wird das Ganze wenn Du es objektorientiert schreibst. Ich würde es auf die schnelle ungefähr so machen:

Code: Alles auswählen

from Tkinter import *

class Abfrage(Frame):
	def __init__(self,root):
		Frame.__init__(self,root)
		self.root = root
		self.fragen = [
			"Wie heisst Du?",
			"Wie alt bist Du?",
			"Warum stellst Du so viele Fragen?"
		]
		self.antwort = []
		self.i=0
		
		self.label = Label()
		self.label.pack()
		self.e = Entry()
		self.e.pack()
		self.b = Button(text="Next",command=self.next_question)
		self.b.pack()
		self.next_question()
	
	def next_question(self):
		self.label.configure(text=self.fragen[self.i])
		if self.i > 0:
			self.antwort.append(self.e.get())
		self.e.delete(0,'end')
		if self.i == 2:
			self.b.configure(text="Print and Quit",command=self.print_it)
		self.i += 1

	def print_it(self):
		self.antwort.append(self.e.get())
		print "Name: %s\nAlter: %s\nGrund fuer viele nervende Fragen :-) : %s" % (
			self.antwort[0],self.antwort[1],self.antwort[2])
		self.root.destroy()

root = Tk()
Abfrage(root).pack()
root.mainloop()
Naja, ungefähr so :wink:

Gruß, mawe

Verfasst: Sonntag 5. September 2004, 14:25
von ShadowFreak
Werds mal aus probieren.

Danke für die Antwort.
:mrgreen:

Verfasst: Sonntag 5. September 2004, 15:18
von ShadowFreak
So, ne Frage zu dem hab ich aber noch wie kann ich machen, dass das Porg
hier:

Code: Alles auswählen

 ...   def print_it(self):
        self.antwort.append(self.e.get())
        print "Name: %s\nAlter: %s\nGrund fuer viele nervende Fragen Smile : %s" % (
            self.antwort[0],self.antwort[1],self.antwort[2])
        # also hier
         self.root.destroy()

root = Tk()
Abfrage(root).pack()
root.mainloop() 
3 sec anhält damit ich das ergebnis lesen kann,

mit time.sleep(3) hab ich schon probiert. zeigt er vor slef.root.destroy einen Syntax error

Verfasst: Sonntag 5. September 2004, 15:31
von mawe

Code: Alles auswählen

def print_it(self):
		self.antwort.append(self.e.get())
		print "Name: %s\nAlter: %s\nGrund fuer viele nervende Fragen :-) : %s" % (
			self.antwort[0],self.antwort[1],self.antwort[2])
		time.sleep(3)
		self.root.destroy()
Das funktioniert bei mir. Schau mal ob die Einrückung passt, vielleicht sind Tabulator und Spaces gemischt.

UPDATE: Ich glaube es gibt da ein Missverständnis, oder? Das Ergebnis wird auf der Konsole ausgegeben, nicht in der GUI.

Gruß, mawe

Verfasst: Sonntag 5. September 2004, 15:34
von ShadowFreak
Last Question.

Wie kann ich die Antwort auch in das Kästenchen und net in der Dos Box erscheinen lassen ??

Verfasst: Sonntag 5. September 2004, 15:40
von mawe

Code: Alles auswählen

def print_it(self):
		self.antwort.append(self.e.get())
		self.label.configure(text="Name: %s\nAlter: %s\nGrund fuer viele nervende Fragen :-) : %s" % (
			self.antwort[0],self.antwort[1],self.antwort[2]))
		self.b.destroy()
		self.e.destroy()
So wird das Ergebnis als Label geschrieben. Wenn Du mit Kästchen das Entry meinst, verwende

Code: Alles auswählen

self.e.insert('end', "der text")
Geht allerdings nicht mehrzeilig. Da müsstest Du ein Textfeld verwenden.

Gruß, mawe

Verfasst: Sonntag 5. September 2004, 16:10
von ShadowFreak
Nich den Entry sondern das Graue kästchen wo alles drinne.

Verfasst: Sonntag 5. September 2004, 16:14
von mawe
Naja, ist dann das

Code: Alles auswählen

def print_it(self):
        self.antwort.append(self.e.get())
        self.label.configure(text="Name: %s\nAlter: %s\nGrund fuer viele nervende Fragen : %s" % (
            self.antwort[0],self.antwort[1],self.antwort[2]))
        self.b.destroy()
        self.e.destroy() 
nicht eh genau was Du willst?

Gruß, mawe

Verfasst: Sonntag 5. September 2004, 16:32
von ShadowFreak
Stimmt geht jetzt. Danke für alles.

Hab aber noch 2 Fragen ^^: 1. Nerv ich wirklich ??
2. Woher weist du das alles ?? Will das auch lernen, denn immer nur Fragen is doof. :mrgreen:



Mfg ShadowFreak

Verfasst: Sonntag 5. September 2004, 16:58
von mawe
ShadowFreak hat geschrieben: denn immer nur Fragen is doof.
Fragen ist nie doof!!
ShadowFreak hat geschrieben: Nerv ich wirklich ??
Na und wie!! (Kleiner Scherz :D)
ShadowFreak hat geschrieben: Woher weist du das alles ?
Angefangen hab ich mit einem Buch. Dann gibt's im Internet viel nützliche Info, Dookie hat Dir ja vor kurzem einen guten Link dazu gegeben.
Am meisten hab ich gelernt, indem ich mir ein fertiges Script hergenommen und damit herumexperimentiert habe.
Und schliesslich gibt's da noch ein sehr cooles Forum mit sehr coolen Leuten :D

Gruß, mawe

Verfasst: Sonntag 5. September 2004, 17:03
von ShadowFreak
Gut danke *erleichtert* dachte schon ich geh euch auf die nerven ^^.

Darf ich Fragen ^^ welches Buch das war??

Verfasst: Sonntag 5. September 2004, 19:21
von mawe
Objektorientierte Programmierung mit Python von Michael Weigend

Gruß, mawe

Verfasst: Sonntag 5. September 2004, 19:50
von ShadowFreak
Gut danke. Werd ich mir mal Zulegen.

Verfasst: Sonntag 5. September 2004, 20:28
von ShadowFreak
Hi,

hab noch ne Frage.

Wen ich einem Button diesen Befel zuweise:

Code: Alles auswählen


def Start():
os.system('start "C:\Games\Warcraft III\Frozen Throne.exe"')

passiert irgend wie nix. 
mein Prog wird geschlossen das wars.
Wen ich den Befehl im python shell ausprobs geht alles perfect.
Woran liegt das.
Hab auch "import os"


Danke für Antworten

Mfg ShadowFreak

Verfasst: Sonntag 5. September 2004, 22:52
von Dookie
Hi,

ich hoffe die Einrückung in deinem Script ist vorhanden. was macht das start, bei 'start "C:\Games\Warcraft III\Frozen Throne.exe"' ?
Ansonst wie schon öfter empfohlen, mach ein Dosfenster auf und starte das script von dort, dann bekommst Du im Dosfenster auch die Fehlermeldungen.


Gruß

Dookie

Verfasst: Montag 6. September 2004, 12:12
von ShadowFreak
es passiert garnix mein Programm wird gelossen. Das wars.

Ich wer das mit Dos ma ausprobieren.

Verfasst: Montag 6. September 2004, 19:18
von ShadowFreak
Hi,

danke für den Tip mit dem einrücken.
Daran lag es.
Aber zu dem "start" bei mir geht es ohne garnicht.
Macht ja auch nix. Mit gehts das is die Hauptsache.


Danke für die vielen Antworten.


Mfg. ShadowFreak