Seite 1 von 1

Fehler... I need a help!

Verfasst: Freitag 28. April 2006, 15:57
von Vos
Hallo.
Wenn jemand ein paar minuten zeit hätte? Könnte er bitte mal nach dem fehler suchen? Ich hab ein wenig weitergebastel und nu wills nich mehr bin seit 3 uhr dran den fehler zu suchen. Zeile für zeile durchgegangen jeden abschnitt in Python Shell laufen lassen... kurzum ich bin verzweigelt...

Vielen dank schonmal!!!

Code: Alles auswählen

from Tkinter import *
top = Tk()
top.wm_geometry("500x250")
top.title("PythoTkinter")

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

textfenster = Text(F, width=90)
textfenster.pack(side="right", padx=6, pady=6, expand=YES)

def evNDoc():
	top = Tk()
	top.wm_geometry("250x150")
	top.title("N. Doc")
	
	fNDoc = Frame(top)
	fNDoc.pack(expand="true")
	
	lSchritt1u2 = Label(fNDoc, text="Fensters\n Bsp:10x10\n\n Progamm\n Bsp:test.py(w)\n\n")
	lSchritt1u2.pack(side="left")
	
	fEntry = Frame(fNDoc, border="1", width=30)
	eSchritt1 = Entry(fEntry)
	eSchritt1.pack(side="top", expand="true", padx=3, pady=11)
	fEntry.pack(side="top", padx=6, pady=3, expand="true")

	def evFenster():
		groesse = eSchritt1.get()
		programm.write( "from Tkinter import *" + "\n" + "top = Tk()" //
 + "\n" + "top.wm_geometry('" + groesse + "')" + "\n" + //
"top.title('Werner')" + "\n" + "\n" + "F = Frame(top)" + "\n" + //
"F.pack(expand='true')")		
		programm.flush()
		programm.close()	
	fButtons = Frame(fNDoc, border=1)
	bErstellen = Button(fButtons, text="Erstellen",width=8, height=1, command=evFenster)
	bErstellen.pack(padx=3, pady=3)
	fButtons.pack(expand="true")

def evButton():
	import os
	os.system("Button.pyw")
fButtons = Frame(F, border=1)
bNDoc = Button(fButtons, text="Neues Docoment",width=8, height=1, command=evNDoc)
bNDoc.pack(side="top", padx=6, pady=6)

bButton = Button(fButtons, text="Button",width=8, height=1, command=evButton)
bButton.pack(side="top", padx=6, pady=6)
fButtons.pack(side="top", expand="true")


def evFertigS():
	top = Tk()
	top.wm_geometry("250x150")
	top.title("Fertigstellen")
	
	fFertigS = Frame(top)
	fFertigS.pack(expand="true")
	
	fEntry = Frame(fFertigS, border="1", width=30)
	eFertigS = Entry(fEntry)
	eFertigS.pack(side="top", expand="true", padx=3, pady=11)
	fEntry.pack(side="top", padx=6, pady=3, expand="true")
	
	Dname = eFertigS.get()
	programm2 = file(r "%s.txt" % Dname, "a+")
	programm2.flush()
	programm2.close()
fButtons = Frame(F, border=1)
bButton = Button(fButtons, text="Fertigstellen",width=10, height=1, command=evFertigS)
bButton.pack(side="top", padx=6, pady=6)
fButtons.pack(side="top", expand="true")


F.mainloop()
Grüße

Verfasst: Freitag 28. April 2006, 16:16
von Vos
Okay sorry...

ich hab den fehler...!

Code: Alles auswählen

programm2 = file(r "%s.txt" % Dname, "a+")
das "r" weg... geht ja bei Variablen nich... sorry :oops:

Verfasst: Freitag 28. April 2006, 17:02
von rayo
Hi

Da du den Fehler anscheinend gefunden hast, einfach mal ein Vorschlag für das nächste Mal ...

Wenn du die Fehlermeldung und eine Fehlerbeschreibung hinzufügst, kann man dir viel besser helfen als so.

Jetzt steht nur, dass es nicht geht und der Code, was aber nicht geht und welche Exception es gibt muss der Helfer selbst herausfinden.

Gruss

Verfasst: Freitag 28. April 2006, 20:32
von Vos
Hi.
Ja okay werd ich nächstemal dran denken. Jedoch startete das programm noch nicht einmal, oder beendete sich sofort so das ich die Fehlermeldung nicht sehen konnte!
Aber ich habe ein neues Problem.

Ich habe eine Variable.
sagen wir "a"!
Ein benutzer gibt eine zahl ein und diese zahl wird dan per .get auf die Varbiable übertragen.
Jetzt möchte ich aber die zahl die der Nutzer eingegebenhat um +1 oder +2 erhöhen. Das geht aber nicht. Python macht da nicht mt.
Bei C++ muss man die Variablen ja erst deklarieren mit int ect.

Ihr mal ein beispielcode:

Code: Alles auswählen

a = raw_input("Gib etwas ein: ")

b = a + 1
c = a + 2

print " dan ist B = %s und \n C = %s" %(b,c)
Ich mache das ganze dan nur in Tk aber das dürfte ja kein Problem sein umzusetzen.

Grüße und danke schonmal

Verfasst: Freitag 28. April 2006, 20:47
von N317V
Du sag mal: magst Du Deinen Beispiel-Code selbst mal testen, bevor Du ihn hier postest? Dann hättest Du nämlich mindestens zwei sehr aussagekräftige Fehlermeldungen bekommen.

Verfasst: Freitag 28. April 2006, 20:54
von Vos
Oh sorry...
das Print war zuviel...
Das andere was du meinst ist bestimmt:

Code: Alles auswählen

b = a + 1
c = a + 2
aber da brauch ich ja genau hilfe... wie es richtig geht... es soll ja nur halt Beispiel sein...

Trotzdem danke

Verfasst: Freitag 28. April 2006, 21:04
von Mawilo
Du musst a als integer verwenden - raw_input liefert nur string

Beispiel:

Code: Alles auswählen

a = raw_input("Gib etwas ein: ")

b = int(a) + 1
c = int(a) + 2

print " dan ist B = %s und \n C = %s" %(b,c)

Verfasst: Freitag 28. April 2006, 21:20
von Vos
Jo schon mal danke wenn ihc jetzt aber meine Variablen da reinschriebe kommt eine fehlermeldung:

Code: Alles auswählen

BSchritta = eBSchritt7.get()
BSchrittb = BSchritta
BSchrittc = int(BSchritta)+1
BSchrittd = int(BSchritta)+2
BSchritte = int(BSchritta)+3
invalid literal for int():

oder wenn ich ne zahl in mein Entry schreibe z.B.: 2
TclError: bad text index "2",

Danke im Vorraus

Verfasst: Freitag 28. April 2006, 21:36
von knekke
Was gibt denn:

Code: Alles auswählen

BSchritta = eBSchritt7.get()
print BSchritta
??

Verfasst: Freitag 28. April 2006, 21:39
von Vos
Also ich habs so dazwischen gebaut...

Code: Alles auswählen

BSchrittb = BSchritta
print BSchritta
BSchrittc = int(BSchritta)+1
BSchrittd = int(BSchritta)+2
BSchritte = int(BSchritta)+3
und raus kommt

2
#Fehlermeldung

Verfasst: Freitag 28. April 2006, 21:39
von Mawilo
Die Infos sind natürlich ziemlich knapp. Der Fehler invalid literal sagt, das der übergebene Wert nicht in int umgewandelt werden kann.

Ich habe mal ein kurzes Beispiel.

Code: Alles auswählen

import Tkinter as tk

def test():
    try:
        value = int(entry.get())
        b = value + 1
        c = value + 2
        print " dann ist B = %s und \n C = %s" %(b,c)
    except ValueError:
        print 'Fehler - Nur Zahlen eingeben'

root = tk.Tk()
entry = tk.Entry(root)
entry.pack()
button = tk.Button(root,text='Test',command=test)
button.pack()
root.mainloop()

Verfasst: Freitag 28. April 2006, 21:47
von Vos
Okay ihr mal mehr:

Code: Alles auswählen

def evButton():          #Button wird gedrückt...
	top3 = Tk()
	top3.wm_geometry("180x460")
	top3.title("Button")            #das top
	
	fNDoc = Frame(top3)         #der frame
	fNDoc.pack(expand="true")

	lBSchritt7 = Label(fNDoc, text="Zeile\n Bsp:25")
	lBSchritt7.pack(side="top")
	fEntry = Frame(fNDoc, border="1", width=30)
	eBSchritt7 = Entry(fEntry)
	eBSchritt7.pack(side="top", expand="true", padx=3, pady=3)
	fEntry.pack(side="top", padx=6, pady=3, expand="true")
	def evBErstellen():
		BSchritt1 = eBSchritt1.get()
		BSchritt2 = eBSchritt2.get()
		BSchritt3 = eBSchritt3.get()
		BSchritt4 = eBSchritt4.get()
		BSchritt5 = eBSchritt5.get()
		BSchritt6 = eBSchritt6.get()
		BSchritta = int (eBSchritt7.get())
		BSchrittb = BSchritta
		print BSchritta
		BSchrittc = BSchritta+1
		BSchrittd = int(BSchritta)+2
		BSchritte = int(BSchritta)+3
		textfenster.insert(BSchritta, "\nfButtons = Frame( %s , border=1 )"% BSchritt1)
		textfenster.insert(BSchrittb, "\n%s = Button(fButtons, text='%s',width=8, height=1, command=%s)" % (BSchritt2,BSchritt3,BSchritt4))
		textfenster.insert(BSchrittc, "\n%s.pack(padx=%s, pady=%s)" %  (BSchritt2,BSchritt5,BSchritt6))
		textfenster.insert(BSchrittd, "\nfButtons.pack(expand='true')\n")
		top3.destroy()
Also was soll passieren.

Ich möchte in einen Vorhandenen Text einen Button schrieben. Der anwender soll eingeben können in welcher zeile der Button code stehen soll.

Deshlab das +1, bzw +2 den die zwite zeile des Buttons soll ja direkt unter der 1 des buttons stehen und das wären dan ja

x = Zahl die anwender eingegebn hat
x+1 = 2Zeile des einzufügenden texstes im alten text...
ich hoffe das ist zu verstehen...

Verfasst: Freitag 28. April 2006, 21:52
von knekke
bei

Code: Alles auswählen

BSchrittc = BSchritta+1
fehlt das int().. änder das mal bitte und gib dann die 'Vollständige' Fehlermeldung

bzw. machst du ja beim get() schon ein int draus. da solltest du dich erstmal entscheiden

Verfasst: Freitag 28. April 2006, 22:09
von Vos

Code: Alles auswählen

def evBErstellen():
	BSchritt1 = eBSchritt1.get()
	BSchritt2 = eBSchritt2.get()
	BSchritt3 = eBSchritt3.get()
	BSchritt4 = eBSchritt4.get()
	BSchritt5 = eBSchritt5.get()
	BSchritt6 = eBSchritt6.get()
	BSchritta = eBSchritt7.get()
	BSchrittb = BSchritta
	BSchrittc = int(BSchritta)+1
	BSchrittd = int(BSchritta)+2
	BSchritte = int(BSchritta)+3
Damit hab ichs jetzt versucht...

Fehlermedlung:
Expection in Tkinter callback
Traceback (most recent call las):
File "C:\Python24\lib\lib-tk\Tkinter.py", linr 1345, in __call__
return self.func(*args)
File "C:Verwalten.py", line 103, in evBErstellen
textfenster.insert(BSchritta, "\nfButtons = Frame( %s ,border=1 )"% BSchritt1)
File "C:\Python24\lib\lib-tk\Tkinter.py", linr 2921, in insert
self.tk.call((self._w, 'insert', index, chars) + args)
TclError: bad text index "2",

Verfasst: Freitag 28. April 2006, 22:24
von Mawilo
Der Index zum Einfügen muss mit einem Punkt eingegeben werden. Z.B. 0.2
Durch den Integer-Wert ist die Zahl aber ohne Punkt (in deinem Fall 2).
Ersetze doch mal

Code: Alles auswählen

int()
mit

Code: Alles auswählen

float()

Verfasst: Freitag 28. April 2006, 22:25
von knekke

Code: Alles auswählen

textfenster.insert(BSchritta, "\nfButtons = Frame( %s , border=1 )"% BSchritt1)
Bei Textfenster handelt es sich um ein Text-Widget und nicht um ein Entry.
Probier mal:

Code: Alles auswählen

textfenster.insert(2.0, "\nfButtons = Frame( %s , border=1 )"% BSchritt1)
entsprechend auch für die folgenden Zeilen.

Verfasst: Samstag 29. April 2006, 07:13
von Vos
Also ich habs jetzt anders gemacht.

1. mal hab ich den ganzen text in ein Insert geschrieben... Was sehr unleserlich ist...
2. der nutzer muss 2.0 oder so reinschreiben... ich dachte man könnte das irgendwie so machen Variable.0 ....

Code: Alles auswählen

	BSchritt7 = eBSchritt7.get()
	textfenster.insert(BSchritt7, "\nfButtons = Frame( %s , border=1 )\n%s = Button(fButtons, text='%s',width=8, height=1, command=%s)\n%s.pack(padx=%s, pady=%s)\nfButtons.pack(expand='true')\n"% (BSchritt1,BSchritt2,BSchritt3,BSchritt4,BSchritt2,BSchritt5,BSchritt6) )
4.das mit +1 ect hab ich weggelassen...
der Nutzter muss jedoch 2.0 oder 0.0 oder so einfühgen...

Danke und grüße