danke, die seite hab ich mir schon angeschaut. aber es soll ja keine textarea erzeugt werden sondern eine simple textausgabe bei der man das fenster von der größe her verändern kann wie man will und der text sich dementsprechend über mehrere zeilen erstrecken kann.
zu 3 nochmal:
ich hab das problem (gehabt) das ich einen bereich für die ausgabe der frage habe und in dem muss, wenn man eine andere frage auswählt hat, diese erscheinen und die alte soll gelöscht werden, weil sie ja sonst darunter gepackt wird. und ich hatte jetzt die idee die ensprechenden elemente (label, buttons, evt. Toplevel) zu löschen und dann neue einzufügen, was natürlich bei programmstart zu einem fehler führt, da die elemente noch nicht da sind.
Hier jetzt einfach mal der gesammte code:
Code: Alles auswählen
# MC Tutor 2010
# Version 1.0
# (c) 2010 Marvin Blum
from tkinter import *
from tkinter import messagebox
class Tutor:
question = 0
saved = 0
def __init__(self):
self.wnd = Tk()
self.wnd.title("MC Tutor 2010 | (c) 2010 Marvin Blum") # Fenstertitel
self.wnd.geometry("800x500") # Fenstergroesse
self.wnd.iconbitmap(default = 'graphics/icon.ico') # Fenstericon
self.wnd.protocol('WM_DELETE_WINDOW', self.exit)
self.drawGUI() # GUI erstellen
self.getQuestions() # Fragen auslesen
self.wnd.mainloop()
# GUI erstellen
def drawGUI(self):
# Grafiken laden
img_new = PhotoImage(file = 'graphics/new.gif') # Neue Befragung
img_answer = PhotoImage(file = 'graphics/answer.gif') # Antwort zeigen
img_save = PhotoImage(file = 'graphics/save.gif') # Speichern
img_exit = PhotoImage(file = 'graphics/exit.gif') # Beenden
# Menu
menu = Menu(self.wnd)
self.wnd.config(menu = menu)
# Dateimenu
file_menu = Menu(menu)
menu.add_cascade(label = 'Datei', menu = file_menu)
file_menu.add_command(label = 'Neue Befragung', command = self.restart)
file_menu.add_command(label = 'Speichern', command = self.save)
file_menu.add_command(label = 'Beenden', command = self.exit)
# Toolbar
toolbar = Frame(self.wnd)
toolbar.config(bg = "#dee3f3")
b = Button(toolbar, image = img_new, command = self.restart)
b.image = img_new
b.pack(side = LEFT, padx = 2, pady = 2)
b = Button(toolbar, image = img_answer, command = self.showAnswer)
b.image = img_answer
b.pack(side = LEFT, padx = 2, pady = 2)
b = Button(toolbar, image = img_save, command = self.save)
b.image = img_save
b.pack(side = LEFT, padx = 2, pady = 2)
b = Button(toolbar, image = img_exit, command = self.exit)
b.image = img_exit
b.pack(side = LEFT, padx = 2, pady = 2)
toolbar.pack(side = TOP, fill = X)
# Liste
self.list = Listbox(self.wnd, selectmode = SINGLE)
scroll = Scrollbar()
scroll.config(command = self.list.yview)
self.list.config(yscrollcommand = scroll.set, width = 30)
self.list.pack(side = LEFT, fill = Y)
scroll.pack(side = LEFT, fill = Y)
# Fragen auslesen
def getQuestions(self):
f = open('questions.txt')
tmp = f.read()
self.questions = tmp.split('\n')
# In Liste eintragen
for i in self.questions:
tmp = i.split('||')
self.list.insert(END, tmp[0])
self.selection() # Auswahl abfangen
# Frage anzeigen
def showQuestion(self):
# Zerlegen
tmp = self.questions[0].split('||')
# Loeschen
try:
self.title.pack_forget()
self.start.pack_forget()
self.answer1.pack_forget()
self.answer2.pack_forget()
self.answer3.pack_forget()
self.answer4.pack_forget()
self.image_wnd.destroy()
except:
pass
try:
self.end.pack_forget()
except:
pass
# Ausgabe
self.answer = tmp[6] # Richtige Antwort
self.title = Label(self.wnd, text = tmp[0])
self.title.config(anchor = W, justify = LEFT, bg = '#0000ff', fg = '#ffffff', font = 'Arial 12 normal')
self.title.pack(side = TOP, fill = BOTH, padx = 2, pady = 2)
# Frage
self.start = Label(self.wnd, text = tmp[1])
self.start.config(anchor = W, justify = LEFT, font = 'Arial 12 normal')
self.start.pack(side = TOP, fill = BOTH, padx = 2, pady = 10)
# Antwort A
self.answer1 = Button(self.wnd, text = 'A: '+tmp[2], command = self.answer)
self.answer1.config(anchor = W, justify = LEFT, bg = '#d0d0d0', relief = FLAT, font = 'Arial 12 normal')
self.answer1.pack(side = TOP, fill = BOTH, padx = 2, pady = 2)
# Antwort B
self.answer2 = Button(self.wnd, text = 'B: '+tmp[3], command = self.answer)
self.answer2.config(anchor = W, justify = LEFT, bg = '#d0d0d0', relief = FLAT, font = 'Arial 12 normal')
self.answer2.pack(side = TOP, fill = BOTH, padx = 2, pady = 2)
if tmp[4]:
#Antwort C
self.answer3 = Button(self.wnd, text = 'C: '+tmp[4], command = self.answer)
self.answer3.config(anchor = W, justify = LEFT, bg = '#d0d0d0', relief = FLAT, font = 'Arial 12 normal')
self.answer3.pack(side = TOP, fill = BOTH, padx = 2, pady = 2)
if tmp[5]:
# Antwort D
self.answer4 = Button(self.wnd, text = 'D: '+tmp[5], command = self.answer)
self.answer4.config(anchor = W, justify = LEFT, bg = '#d0d0d0', relief = FLAT, font = 'Arial 12 normal')
self.answer4.pack(side = TOP, fill = BOTH, padx = 2, pady = 2)
if tmp[7]:
# Anhang
self.end = Label(self.wnd, text = tmp[7])
self.end.config(anchor = W, justify = LEFT, font = 'Arial 12 normal')
self.end.pack(side = TOP, fill = BOTH, padx = 2, pady = 10)
if tmp[8]:
try:
image = PhotoImage(file = 'images/'+tmp[8])
self.image_wnd = Toplevel()
self.image_wnd.title('Bild: '+tmp[8])
self.image_wnd.transient(self.wnd)
img = Label(self.image_wnd, image = image)
img.image = image
img.pack()
except:
messagebox.showwarning('Grafik nicht gefunden', 'Die Grafik "'+tmp[8]+'" konnte nicht gefunden werden!')
# Neue Befragung
def restart(self):
self.question = 0
self.list.select_clear(0, END)
self.list.select_anchor(0)
self.list.select_set(0)
# Antwort zeigen
def showAnswer(self):
pass
# Antworten
def answer(self, ans):
pass
# Speichern
def save(self):
pass
# Frage auswaehlen
def selection(self):
# Auswahl
selected = self.list.curselection()
if selected != self.question:
self.question = selected
self.showQuestion()
self.wnd.after(250, self.selection)
# Beenden
def exit(self):
if self.saved == 0:
ask = messagebox.askyesno('Beenden', 'Willst du wirklich beenden ohne zu speichern?')
if ask == 1:
self.wnd.quit()
else:
self.wnd.quit()
Tutor()
da auch noch mal ein hinweis: in self.question soll die id der ausgewählten frage sein (am anfang 0), ändern will ich die über diese selection methode. nur kann ich damit nichts anfangen, weil es kein int ist (tmp = self.questions[0].split('||') soll tmp = self.questions[self.question].split('||') sein)