Problem und Fragen mit Tkinter (erstes Programm)

Fragen zu Tkinter.
Antworten
ShadowFreak
User
Beiträge: 28
Registriert: Samstag 4. September 2004, 11:16

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
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

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
ShadowFreak
User
Beiträge: 28
Registriert: Samstag 4. September 2004, 11:16

Werds mal aus probieren.

Danke für die Antwort.
:mrgreen:
ShadowFreak
User
Beiträge: 28
Registriert: Samstag 4. September 2004, 11:16

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
Zuletzt geändert von ShadowFreak am Sonntag 5. September 2004, 15:32, insgesamt 1-mal geändert.
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

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
Zuletzt geändert von mawe am Sonntag 5. September 2004, 15:35, insgesamt 1-mal geändert.
ShadowFreak
User
Beiträge: 28
Registriert: Samstag 4. September 2004, 11:16

Last Question.

Wie kann ich die Antwort auch in das Kästenchen und net in der Dos Box erscheinen lassen ??
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

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
ShadowFreak
User
Beiträge: 28
Registriert: Samstag 4. September 2004, 11:16

Nich den Entry sondern das Graue kästchen wo alles drinne.
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

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
ShadowFreak
User
Beiträge: 28
Registriert: Samstag 4. September 2004, 11:16

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
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

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
ShadowFreak
User
Beiträge: 28
Registriert: Samstag 4. September 2004, 11:16

Gut danke *erleichtert* dachte schon ich geh euch auf die nerven ^^.

Darf ich Fragen ^^ welches Buch das war??
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Objektorientierte Programmierung mit Python von Michael Weigend

Gruß, mawe
ShadowFreak
User
Beiträge: 28
Registriert: Samstag 4. September 2004, 11:16

Gut danke. Werd ich mir mal Zulegen.
ShadowFreak
User
Beiträge: 28
Registriert: Samstag 4. September 2004, 11:16

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
Zuletzt geändert von ShadowFreak am Montag 6. September 2004, 16:51, insgesamt 1-mal geändert.
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
[code]#!/usr/bin/env python
import this[/code]
ShadowFreak
User
Beiträge: 28
Registriert: Samstag 4. September 2004, 11:16

es passiert garnix mein Programm wird gelossen. Das wars.

Ich wer das mit Dos ma ausprobieren.
ShadowFreak
User
Beiträge: 28
Registriert: Samstag 4. September 2004, 11:16

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
Antworten