Ok, das stimmt, das ich eigentlich keine verwenden will. Wie ich es sonst machen könnte hab ich mir noch nicht überlegt, eine Variable an ein Objekt binden kann ich noch nicht, schau ich mir aber gleich mal an.
edit: hab die globalen Variablen ersetzt (habs dummerweise nicht mit replace gemacht, deswegen hats ein bisschen gedauert, bis ich alle gefunden hab, aber das Programm läuft jetzt soweit.)
GUI in Programm integrieren
Zuletzt geändert von klaus am Donnerstag 27. September 2007, 20:16, insgesamt 1-mal geändert.
http://klausweidinger.kl.funpic.de
Ich bin gerade dabei, die Benotung einzubauen, aber ich hab da ein ganz komisches Problem:
bei mir ergibt 1/4, 2/4 und 3/4 immer 0, normalerweise müssten aber 0.25, 0.5 und 0.75 rauskommen (aber nur, wenn ich ein Skript ausführe, in der IDLE funktionierts).
Ich habe Python nach den Installationsanweisungen von "Python4kids" installiert, deshalb müsste der Operator / eigentlich immer die Gleitkommadivision ausführen. Bei mir rechnet er aber in diesem Skript die Ganzzahldivision.
Kann mir jemand weiterhelfen.
bei mir ergibt 1/4, 2/4 und 3/4 immer 0, normalerweise müssten aber 0.25, 0.5 und 0.75 rauskommen (aber nur, wenn ich ein Skript ausführe, in der IDLE funktionierts).
Ich habe Python nach den Installationsanweisungen von "Python4kids" installiert, deshalb müsste der Operator / eigentlich immer die Gleitkommadivision ausführen. Bei mir rechnet er aber in diesem Skript die Ganzzahldivision.
Kann mir jemand weiterhelfen.
http://klausweidinger.kl.funpic.de
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
Entweder du schreibst das an den Anfang:
Oder du dividierst Gleitkommazahlen:
Code: Alles auswählen
from __future__ import division
Code: Alles auswählen
>>> 3/4.0
0.75
>>> 3/float(4)
0.75
Offizielles Python-Tutorial (Deutsche Version)
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Danke für den Tipp. Ich werds versuchen und meld mich wieder wenns funktioniert.
edit: funktioniert
Allerdings hab ich immer noch keine Antwort auf die Frage von vor ein paar Tagen bekommen: Kann man Entry-Widgets resetten, also dass sie wieder leer sind?
Außerdem würde mich interessieren, warum ich in einer Klasse
mit self. aber
ohne self. schreiben muss.
edit: funktioniert
Allerdings hab ich immer noch keine Antwort auf die Frage von vor ein paar Tagen bekommen: Kann man Entry-Widgets resetten, also dass sie wieder leer sind?
Außerdem würde mich interessieren, warum ich in einer Klasse
Code: Alles auswählen
self.entry = Entry(...)
Code: Alles auswählen
frame = Frame(...)
http://klausweidinger.kl.funpic.de
Hi,
ich hoffe das hilft dir weiter.
Gruss
pyStyler
Code: Alles auswählen
import Tkinter
def lerreEntry(xWidget):
xWidget.delete(0, Tkinter.END)
def widgetSetText():
lerreEntry(entry)
rt = Tkinter.Tk()
entry = Tkinter.Entry(rt)
entry.pack()
b = Tkinter.Button( rt,
text='Leere Entry',
command=widgetSetText)
""" oder, command=lambda e=entry: e.delete(0, Tkinter.END)) """
b.pack()
rt.mainloop()
Gruss
pyStyler
wenn ich das richtig sehe, resetted die Zeile
xWidget.delete(0, Tkinter.END)
das Entry-Widget.
In meinem Programm heißt die Zeile dann so:
self.entry.delete(0, END)
(Tkinter mit from importiert.)
xWidget.delete(0, Tkinter.END)
das Entry-Widget.
In meinem Programm heißt die Zeile dann so:
self.entry.delete(0, END)
(Tkinter mit from importiert.)
http://klausweidinger.kl.funpic.de
ja richtig.klaus hat geschrieben:wenn ich das richtig sehe, resetted die Zeile
xWidget.delete(0, Tkinter.END)
wann das eine frage sein soll, dann ist deine vermutung auch hier richtig.klaus hat geschrieben: das Entry-Widget.
In meinem Programm heißt die Zeile dann so:
self.entry.delete(0, END)
(Tkinter mit from importiert.)
Hab mal wieder ein Problem, das ich nicht verstehe:
Ich möchte 2 Gruppen von Radioboxen machen, eine die für den Stoff der Abfrage zuständig ist, und die andere soll den Modus festlegen.
Jetzt hab ich des schon mal grob entworfen, aber obwohl ich den beiden Gruppen verschiedene Variablen gegeben habe, beeinflussen sie sich gegenseitig.
edit: bin jetzt auf .grid umgestiegen. Des is ja viel leichter anzuordnen.
Hier mal der neue Code:
Ich möchte 2 Gruppen von Radioboxen machen, eine die für den Stoff der Abfrage zuständig ist, und die andere soll den Modus festlegen.
Jetzt hab ich des schon mal grob entworfen, aber obwohl ich den beiden Gruppen verschiedene Variablen gegeben habe, beeinflussen sie sich gegenseitig.
edit: bin jetzt auf .grid umgestiegen. Des is ja viel leichter anzuordnen.
Hier mal der neue Code:
Code: Alles auswählen
from __future__ import division
import Tkinter as tk
import math
index = [["1", "2", 0], ["2", "3", 0], ["3", "5", 0], ["4", "7", 0]]
class I:
question, solve, stat = "default", "default", "default"
points, counter, switch = 0, 0, 0
topic, von, bis, modus, dauer = "", 0, 0, "", 0
def __init__(self, master):
I.question, I.solve, I.stat = index[0]
self.label = tk.Label(master, text=I.question, pady=10)
self.label.grid(row=0, column=0)
self.entry = tk.Entry(master, width=100)
self.entry.bind("<Return>", self.correct)
self.entry.grid(row=1, column=0)
self.button = tk.Button(master, text="-------", width=97, command=self.next)
self.button.grid(row=2, column=0)
self.top_()
def top_(self):
top = tk.Toplevel()
tk.Label(top, text="Stoff:").grid(row=0, rowspan=2)
tk.Label(top, text="Lektionen:").grid(row=2, rowspan=2)
tk.Label(top, text="Modus:").grid(row=4)
tk.Label(top, text="Dauer:").grid(row=5)
self.radio11 = tk.Radiobutton(top, text="Roma", variable=I.topic, value="rom")
self.radio11.grid(row=0, column=1)
self.radio12 = tk.Radiobutton(top, text="Prima", variable=I.topic, value="prm")
self.radio12.grid(row=0, column=2)
self.radio13 = tk.Radiobutton(top, text="Felix", variable=I.topic, value="flx")
self.radio13.grid(row=0, column=3)
self.radio14 = tk.Radiobutton(top, text="Ratio", variable=I.topic, value="zus")
self.radio14.grid(row=1, column=1)
self.radio15 = tk.Radiobutton(top, text="Grammatik", variable=I.topic, value="grm")
self.radio15.grid(row=1, column=2, columnspan=2)
self.scale1 = tk.Scale(top, from_=1, to=120, orient=tk.HORIZONTAL, sliderlength=10, command=self.sc1)
self.scale1.grid(row=2, column=1, columnspan=3)
self.scale2 = tk.Scale(top, from_=1, to=120, orient=tk.HORIZONTAL, sliderlength=10, command=self.sc2)
self.scale2.grid(row=3, column=1, columnspan=3)
self.radio21 = tk.Radiobutton(top, text="Lern", variable=I.modus, value="lrn")
self.radio21.grid(row=4, column=1)
self.radio22 = tk.Radiobutton(top, text="Abfr.", variable=I.modus, value="abf")
self.radio22.grid(row=4, column=2)
self.radio23 = tk.Radiobutton(top, text="Wdh.", variable=I.modus, value="wdh")
self.radio23.grid(row=4, column=3)
self.scale3 = tk.Scale(top, from_=1, to=500, orient=tk.HORIZONTAL, sliderlength=10)
self.scale3.grid(row=5, column=1, columnspan=3)
self.confirm = tk.Button(top, text="OK", width=38, command=self.select)
self.confirm.grid(row=6, column=0, columnspan=4)
def sc1(self, value):
if self.scale1.get() > self.scale2.get():
self.scale2.set(self.scale1.get())
def sc2(self, value):
if self.scale1.get() > self.scale2.get():
self.scale1.set(self.scale2.get())
def select(self):
pass
## I.von = self.scale1.get()
## I.bis = self.scale2.get()
## I.dauer = self.scale3.get()
def correct(self, event):
##...
def next(self):
##...
def evaluate(self, err, von):
mark = int(math.floor(1+(7.142*(1-(err/von)))))
if mark > 5:
mark = 6
print "Du hast",err,"von",von,"Punkten! Note",mark
root = tk.Tk()
iface = I(root)
root.mainloop()
Zuletzt geändert von klaus am Montag 8. Oktober 2007, 16:23, insgesamt 3-mal geändert.
http://klausweidinger.kl.funpic.de
Auch wenn das jetzt ein Doppelpost ist. Ich wüsste schon gerne wieso die beiden Radiobutton-Gruppen sich beeinflussen. Dieses Problem hält mich jetzt seit einer Woche auf und ich kann nicht weiterprogrammieren.
http://klausweidinger.kl.funpic.de
-
- User
- Beiträge: 419
- Registriert: Sonntag 3. September 2006, 15:11
- Wohnort: in den weiten von NRW
- Kontaktdaten:
Poste doch mal den kompletten Code des Stücks. Von wo kommen denn die Variablen? Wieso kommen sie nicht von self? Was ist I?
"I" ist die Klasse. Ich hab sie zuerst Iface genannt, da ich aber so viele Variablen habe, die an sie gebunden sind, habe ich den Namen abgekürzt.
edit: wieso kann ich eig. ältere Beiträge nicht mehr löschen?
edit: wieso kann ich eig. ältere Beiträge nicht mehr löschen?
http://klausweidinger.kl.funpic.de
-
- User
- Beiträge: 419
- Registriert: Sonntag 3. September 2006, 15:11
- Wohnort: in den weiten von NRW
- Kontaktdaten:
1. Check- und Radiobuttons und alle anderen TkWidgets die Variablen erwarten, erwarten tk-Variablen, also tk.StringVar, tk.IntVar, ...
In deinem Fall tk.StringVar.
2. wieso ist das ne klassenvariable?
3. -> machs über self!
4. kommt bestimmt gleich von jmd. anderem
@edit: ua. weil dann der Rest keinen sinn mehr ergibt.
In deinem Fall tk.StringVar.
2. wieso ist das ne klassenvariable?
3. -> machs über self!
4. kommt bestimmt gleich von jmd. anderem
@edit: ua. weil dann der Rest keinen sinn mehr ergibt.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Du kannst sie löschen, solange noch niemand drauf geantwortet hat. Wenn jemand drauf antwortet, zum Beispiel auf deinen Text bezug nimmt und du den Post dann löscht, dann steht der Antwortende doch ziemlich blöd da, wenn er auf etwas antwortet, was von dir gelöscht wurde und daher nicht mehr lesbar ist.klaus hat geschrieben:edit: wieso kann ich eig. ältere Beiträge nicht mehr löschen?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Dann solltest Du nicht so viele Namen daran binden, bzw. an die *Klasse* sowieso nicht. Da es zwei Fenster sind, könnte man das Ganze auch auf eine Klasse/Objekt pro Fenster aufteilen.
Zum eigentlichen Problem: Soweit ich weiss müssen die Argumente für `variable` vom Typ `Tkinter.StringVar`, `Tkinter.IntVar`, `Tkinter.DoubleVar` oder `Tkinter.BooleanVar` sein.
Zum eigentlichen Problem: Soweit ich weiss müssen die Argumente für `variable` vom Typ `Tkinter.StringVar`, `Tkinter.IntVar`, `Tkinter.DoubleVar` oder `Tkinter.BooleanVar` sein.
Ok, dann mach ich zwei Klassen.
Ich hab die Beiden Variablen in tk.topic und tk.modus umbenannt und es klappt trotzdem nicht. Wie müssen die Variablen genau heißen und wie kann ich dann später auf sie zugreifen.
(Tkinter mit "as tk" importiert)
Ich hab die Beiden Variablen in tk.topic und tk.modus umbenannt und es klappt trotzdem nicht. Wie müssen die Variablen genau heißen und wie kann ich dann später auf sie zugreifen.
(Tkinter mit "as tk" importiert)
http://klausweidinger.kl.funpic.de
-
- User
- Beiträge: 419
- Registriert: Sonntag 3. September 2006, 15:11
- Wohnort: in den weiten von NRW
- Kontaktdaten:
Du musst nicht die Namen ändern sondern ihnen tk-Variablen zuweisen:
Code: Alles auswählen
variablenname = tk.StringVar()
tk.Checkbutton(variable = variablenname)
@klaus: Nimm es mir nicht übel, aber lies dir mal bitte ein Tutorial durch und nicht nur das: Arbeite es auch von A-Z durch, damit du ein Verständnis für GUI Entwicklung bekommst! Das was ich bisher von dir hier sehe, lässt mich halt darauf schließen das dir das Allgemeine Verständnis fehlt.
Das ist mein erstes Tkinter-Projekt und ich habe mich davor noch nicht damit auseinandergesetz. Ich habe Tkinter für dieses Projekt extra "gelernt" und bin deshalb kein Profi.
Allerdings muss ich hier eins sagen: Wenn ich Probleme mit Tkinter hatte, habe ich immer zuerst im Internet gesucht, und meistens auf der Seite effbot.org geschaut. Da steht zwar v = IntVar(), aber nicht warum, und dass man das machen muss. Da ich jetzt weiß, wie man das machen muss, isses natürlich klar, aber wenn man als Neuling auf die Seite kommt, dann ist das halt sehr unauffällig. Da steht (in Textform) nur, dass der Wert von variable die Zugehörigkeit zu einer Buttongruppe signalisiert, aber nicht, dass dieser erst speziell erzeugt werden muss.
Außerdem: welche Dokumentation soll ich denn durcharbeiten. Die von effbot scheint mir nicht soviel Wert auf z.T. wichtige Einzelheiten zu legen, sondern eher einen groben Überblick über Tkinter zu geben.
@schlangenbeschwörer: Danke für den Tipp.
Allerdings muss ich hier eins sagen: Wenn ich Probleme mit Tkinter hatte, habe ich immer zuerst im Internet gesucht, und meistens auf der Seite effbot.org geschaut. Da steht zwar v = IntVar(), aber nicht warum, und dass man das machen muss. Da ich jetzt weiß, wie man das machen muss, isses natürlich klar, aber wenn man als Neuling auf die Seite kommt, dann ist das halt sehr unauffällig. Da steht (in Textform) nur, dass der Wert von variable die Zugehörigkeit zu einer Buttongruppe signalisiert, aber nicht, dass dieser erst speziell erzeugt werden muss.
Außerdem: welche Dokumentation soll ich denn durcharbeiten. Die von effbot scheint mir nicht soviel Wert auf z.T. wichtige Einzelheiten zu legen, sondern eher einen groben Überblick über Tkinter zu geben.
@schlangenbeschwörer: Danke für den Tipp.
http://klausweidinger.kl.funpic.de
-
- User
- Beiträge: 419
- Registriert: Sonntag 3. September 2006, 15:11
- Wohnort: in den weiten von NRW
- Kontaktdaten:
Hast du danach auch mal gesucht? ZB hier in der Forensuche?klaus hat geschrieben:Außerdem: welche Dokumentation soll ich denn durcharbeiten. Die von effbot scheint mir nicht soviel Wert auf z.T. wichtige Einzelheiten zu legen, sondern eher einen groben Überblick über Tkinter zu geben.
als Suchwort eignet sich sowas wie "Tkinter lernen"
Klaus: Wie gesagt der Post ist nicht böse gemeint, aber IMO würde ich halt erstmal die Tuts durcharbeiten und mich dann auf ein kleines Projekt stürzten. GUIs zu schreiben ist nicht gerade ein triviales Thema und kann auch schon bei recht kleinen Projekten ziemlich komplex werden.
IMO finde ich die Infos von hier http://wiki.python.org/moin/TkInter recht gut. Sind viele nützliche Links verlinkt die einem ein guten einstieg bieten und natürlich google mit "tkinter tutorials" füttern.
IMO finde ich die Infos von hier http://wiki.python.org/moin/TkInter recht gut. Sind viele nützliche Links verlinkt die einem ein guten einstieg bieten und natürlich google mit "tkinter tutorials" füttern.