File size: 4,049 Bytes
c6ae2f7
bb719f4
c6ae2f7
 
08faaf8
c6ae2f7
8c6c968
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c6ae2f7
 
d9a58b9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c6ae2f7
 
d9a58b9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c6ae2f7
 
 
 
 
08faaf8
c6ae2f7
 
 
 
08faaf8
c6ae2f7
 
08faaf8
c6ae2f7
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import gradio as gr
import plotly.graph_objects as go

def display_tree():
    # This function should create and return a Plotly figure of the tree
    # Currently returns a simple string, but should be replaced with actual graph

    # Define the nodes and edges for the graph
    nodes = ['Node 1', 'Node 2', 'Node 3', 'Node 4']
    edges = [(0, 1), (0, 2), (2, 3)]  # Edges are tuples of node indices
    
    # Define positions for the nodes (you can use a layout algorithm for more complex graphs)
    positions = [(0, 0), (1, 2), (1, -2), (2, 0)]
    
    # Create traces for nodes and edges
    edge_x = []
    edge_y = []
    for edge in edges:
        x0, y0 = positions[edge[0]]
        x1, y1 = positions[edge[1]]
        edge_x.extend([x0, x1, None])
        edge_y.extend([y0, y1, None])
    
    edge_trace = go.Scatter(
        x=edge_x, y=edge_y,
        line=dict(width=2, color='Black'),
        hoverinfo='none',
        mode='lines')
    
    node_x = [pos[0] for pos in positions]
    node_y = [pos[1] for pos in positions]
    
    node_trace = go.Scatter(
        x=node_x, y=node_y,
        mode='markers+text',
        hoverinfo='text',
        marker=dict(showscale=False, size=10, color='Goldenrod'),
        text=nodes,
        textposition="top center"
    )
    
    # Define the layout of the graph
    layout = go.Layout(
        showlegend=False,
        hovermode='closest',
        margin=dict(b=0, l=0, r=0, t=0),
        xaxis=dict(showgrid=False, zeroline=False, showticklabels=False),
        yaxis=dict(showgrid=False, zeroline=False, showticklabels=False)
    )
    
    # Create the figure
    fig = go.Figure(data=[edge_trace, node_trace], layout=layout)
    return fig

def display_image_based_on_dropdown_1(dropdown_value):
    # Create a white image
    img = Image.new('RGB', (200, 100), color='white')
    d = ImageDraw.Draw(img)
    
    # Specify a font. If you have a .ttf font file you can specify its path
    # fnt = ImageFont.truetype('/path/to/font.ttf', 40)
    # Otherwise, we'll use a default PIL font
    fnt = ImageFont.load_default()
    
    # Position the text in the center
    text = "Placeholder"
    textwidth, textheight = d.textsize(text, font=fnt)
    width, height = img.size
    x = (width - textwidth) / 2
    y = (height - textheight) / 2

    # Draw the text onto the image
    d.text((x,y), text, font=fnt, fill='black')
    
    # Save the image to a file in buffer to return
    img.save('/tmp/dummy_image.png')
    
    return '/tmp/dummy_image.png'

def display_image_based_on_dropdown_2(dropdown_value):
    # Create a white image
    img = Image.new('RGB', (200, 100), color='white')
    d = ImageDraw.Draw(img)
    
    # Specify a font. If you have a .ttf font file you can specify its path
    # fnt = ImageFont.truetype('/path/to/font.ttf', 40)
    # Otherwise, we'll use a default PIL font
    fnt = ImageFont.load_default()
    
    # Position the text in the center
    text = "Placeholder"
    textwidth, textheight = d.textsize(text, font=fnt)
    width, height = img.size
    x = (width - textwidth) / 2
    y = (height - textheight) / 2

    # Draw the text onto the image
    d.text((x,y), text, font=fnt, fill='black')
    
    # Save the image to a file in buffer to return
    img.save('/tmp/dummy_image.png')
    
    return '/tmp/dummy_image.png'

with gr.Blocks() as demo:
    gr.Markdown("## Interactive Tree and Image Display")
    
    with gr.Row():
        tree_output = gr.Plot(display_tree)  # Connect the function directly
    
    with gr.Row():
        with gr.Column():
            dropdown_1 = gr.Dropdown(label="Select Option for Field 2", choices=["Option 1", "Option 2", "Option 3"])
            image_output_1 = gr.Image(fn=display_image_based_on_dropdown_1, inputs=dropdown_1)
        with gr.Column():
            dropdown_2 = gr.Dropdown(label="Select Option for Field 3", choices=["Option A", "Option B", "Option C"])
            image_output_2 = gr.Image(fn=display_image_based_on_dropdown_2, inputs=dropdown_2)

demo.launch()