Problem und Fragen mit Tkinter (erstes Programm)

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

Problem und Fragen mit Tkinter (erstes Programm)

Beitragvon ShadowFreak » Sonntag 5. September 2004, 12:57

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])

Beitragvon mawe » Sonntag 5. September 2004, 14:19

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

Beitragvon ShadowFreak » Sonntag 5. September 2004, 14:25

Werds mal aus probieren.

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

Beitragvon ShadowFreak » Sonntag 5. September 2004, 15:18

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])

Beitragvon mawe » Sonntag 5. September 2004, 15:31

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

Beitragvon ShadowFreak » Sonntag 5. September 2004, 15:34

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])

Beitragvon mawe » Sonntag 5. September 2004, 15:40

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

Beitragvon ShadowFreak » Sonntag 5. September 2004, 16:10

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])

Beitragvon mawe » Sonntag 5. September 2004, 16:14

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

Beitragvon ShadowFreak » Sonntag 5. September 2004, 16:32

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])

Beitragvon mawe » Sonntag 5. September 2004, 16:58

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

Beitragvon ShadowFreak » Sonntag 5. September 2004, 17:03

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])

Beitragvon mawe » Sonntag 5. September 2004, 19:21

Objektorientierte Programmierung mit Python von Michael Weigend

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

Beitragvon ShadowFreak » Sonntag 5. September 2004, 19:50

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

Beitragvon ShadowFreak » Sonntag 5. September 2004, 20:28

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.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]