Fehler... I need a help!

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Vos
User
Beiträge: 40
Registriert: Freitag 24. März 2006, 13:37

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
Vos
User
Beiträge: 40
Registriert: Freitag 24. März 2006, 13:37

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:
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

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
Vos
User
Beiträge: 40
Registriert: Freitag 24. März 2006, 13:37

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
Zuletzt geändert von Vos am Freitag 28. April 2006, 20:53, insgesamt 1-mal geändert.
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

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.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Vos
User
Beiträge: 40
Registriert: Freitag 24. März 2006, 13:37

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
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

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)
Vos
User
Beiträge: 40
Registriert: Freitag 24. März 2006, 13:37

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
Benutzeravatar
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

Was gibt denn:

Code: Alles auswählen

BSchritta = eBSchritt7.get()
print BSchritta
??
Vos
User
Beiträge: 40
Registriert: Freitag 24. März 2006, 13:37

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
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

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()
Vos
User
Beiträge: 40
Registriert: Freitag 24. März 2006, 13:37

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...
Benutzeravatar
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

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
Vos
User
Beiträge: 40
Registriert: Freitag 24. März 2006, 13:37

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",
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

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()
Zuletzt geändert von Mawilo am Freitag 28. April 2006, 22:52, insgesamt 1-mal geändert.
Benutzeravatar
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

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.
Vos
User
Beiträge: 40
Registriert: Freitag 24. März 2006, 13:37

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
Antworten