Hallo Sirius,
deine Vorschläge vielen Dank. Aber jetzt funktioniert mein Code auch nur so, dass er den Value ausgibt, mit dem die Textbox initialisiert wurde und nicht den Wert der in die Textbox hineingeschrieben wurde. Der gesamte Code ist:
Code: Alles auswählen
from sympy.matrices import *
from sympy.printing import *
from IPython.display import display, HTML, Math, Latex, clear_output
from ipywidgets import widgets
from random import randint
import numpy as np
from builtins import str
from ipywidgets import *
import ast
from copy import deepcopy
text1 = widgets.Text()
text=[]
button1 = widgets.Button(description="Auswerten")
button2 = widgets.Button(description="Neue Aufgabe")
#x = np.arange(9).reshape(3,3)
#y = np.arange(3).reshape(3,1)
x=Matrix()
y=Matrix()
latexWidget = widgets.Latex()
taskWidget = widgets.HTML()
taskWidget.value = "<b>Berechnen Sie:</b>"
mhbox1 = widgets.HBox((taskWidget, latexWidget))
mhbox2 = widgets.HBox((button1, button2))
cb_container= []
def init_vectors(b):
global x, y, text1, text, cb_container
cb_container=[]
text_copy=[]
#cb_container = widgets.HBox()
cb_container.append(widgets.HBox())
cb_container.append(widgets.HBox())
cb_container.append(widgets.HBox())
#for j in range(3):
for j in range(3):
text=deepcopy(text_copy)
text.append(widgets.Text(Description="Thema", value="True", width=40))
text.append(widgets.Text(Description="Thema", value="True", width=40))
text.append(widgets.Text(Description="Thema", value="True", width=40))
cb_container[j].children=[i for i in text]
x=zeros(3,3)
y=zeros(3,1)
for i in range(3):
for j in range(3):
x[j,i]=randint(-10,10)
for i in range(1):
for j in range(3):
y[j,i]=randint(-10,10)
#n_matrix_x=np.eye(3)
n_matrix_x=np.matrix(x).astype(float)
gefunden=False
if np.linalg.det(n_matrix_x)==0:
init_vectors(b)
else:
A,B=np.linalg.eig(n_matrix_x)
for i in range(3):
if A[i].real==0 or A[i].imag!=0:
gefunden=True
break
#n_matrix_x=np.matrix(x).astype(float)
#n_matrix_y=np.matrix(y).astype(float)
#z = np.linalg.solve(n_matrix_x,n_matrix_y)
#for i in range(3):
#if z[i,0]!= int(z[i,0]):
#gefunden=True
#break
if gefunden:
init_vectors(b)
text1.value = ""
display_task()
def display_task():
global x, y, latexWidget
clear_output()
a1 = latex(x)
a2 = latex(y)
a1 = a1.replace("left[", "left(")
a2 = a2.replace("left[", "left(")
a1 = a1.replace("right]", "right)")
a2 = a2.replace("right]", "right)")
str1 = "$\langle" + a1 + ", " + a2 + "\\rangle$"
latexWidget.value = str1
def evaluate(b):
global x, y, text1, cb_container, text
n_matrix_x=np.matrix(x).astype(float)
n_matrix_y=np.matrix(y).astype(float)
z = np.linalg.solve(n_matrix_x,n_matrix_y)
w=widgets.Textarea(Description='Lösung GLS',
value=str(z)
)
display(w)
clear_output()
display_task()
loesung_gefunden=True
i=0
for c in cb_container[2].children:
w=widgets.Textarea(Description = 'Lösung GLS',
value = c.value
)
display(w)
#if round(z[i,0],1)!= float(c.value):
#loesung_gefunden=False
#break
#i=i+1
if loesung_gefunden:
display(HTML("<b><font color='green'>Richtig</font></b>"))
else:
display(HTML("<b><font color='red'>Falsch</font></b>"))
def exec_la_scalar_1():
global cb_container
init_vectors(button2)
button2.on_click(init_vectors)
button1.on_click(evaluate)
display(widgets.VBox((mhbox1,cb_container[0])))
display(widgets.VBox((cb_container[1],cb_container[2], mhbox2)))
Die kritischen Stellen im Code sind in init_vectors:
Code: Alles auswählen
cb_container=[]
text_copy=[]
#cb_container = widgets.HBox()
cb_container.append(widgets.HBox())
cb_container.append(widgets.HBox())
cb_container.append(widgets.HBox())
#for j in range(3):
for j in range(3):
text=deepcopy(text_copy)
text.append(widgets.Text(Description="Thema", value="True", width=40))
text.append(widgets.Text(Description="Thema", value="True", width=40))
text.append(widgets.Text(Description="Thema", value="True", width=40))
cb_container[j].children=[i for i in text]
und in evaluate:
Code: Alles auswählen
for c in cb_container[2].children:
w=widgets.Textarea(Description = 'Lösung GLS',
value = c.value
)
display(w)
Wie erreiche ich es, dass die Werte die in der Textbox drinstehen auch wieder ausgegeben werden in w? Irgendwie muss man das System dazu zwingen die Werte, die ich in die Textbox eingetragen habe auch dem c.value zuzuweisen. Das geschieht aber nicht.