Looking for a simple GUI

The screenshot below was created using Python and Qt5.
I would like to create something similar with Julia.
I looked around for a GUI that would suit my needs. There are many available, but most of them do things I don’t need.
Could you recommend a suitable GUI?

Do you want to develop a web GUI or a standalone desktop application? If the latter, Julia and Qt6 (Qt Quick + QML). QML.jl

2 Likes

@karei. Thank you. I’m son’t know QML, but will give it a try

1 Like

You can use GLMakie :slight_smile:

Took the chance to find out if claude code can create a GUI from a picture with Makie and it almost worked out:

using GLMakie

# Create the main figure with proper layout
fig = Figure(resolution = (1200, 800), backgroundcolor = :lightgray)

# Header widgets
header = GridLayout(fig[1, :], tellwidth=false, height=50)
year_menu = Menu(header[1, 1], options = ["2024", "2025", "2026"], default = "2025", width = 80,)
month_menu = Menu(header[1, 2], options = ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"], default = "Giugno", width = 120)
select_btn = Button(header[1, 3], label = "Select", width = 80)
Label(header[1, 4], "JUST FOR TESTING", fontsize = 20, color = :red, halign = :center)
# Calendar area
calendar = GridLayout(fig[2, :], tellwidth=false, tellheight=false)
cal_ax = Axis(calendar[1, 1], limits = (0, 8, 0, 8), backgroundcolor = :white, title = "Giugno 2025", titlecolor = :blue, titlesize = 16)
hidedecorations!(cal_ax)

# Day headers
days = ["L", "M", "M", "G", "V", "S", "D"]
for (i, day) in enumerate(days)
    text!(cal_ax, i, 7, text = day, fontsize = 12)
end

# Calendar data with colors
calendar_data = [
    (1, 6, "1", :white), (2, 6, "2", :white), (3, 6, "3", :white), (4, 6, "4", :white), (5, 6, "5", :white), (6, 6, "6", :white), (7, 6, "7", :white),
    (1, 5, "8", :white), (2, 5, "9", :yellow), (3, 5, "10", :white), (4, 5, "11", :white), (5, 5, "12", :white), (6, 5, "13", :white), (7, 5, "14", :white),
    (1, 4, "15", :white), (2, 4, "16", :white), (3, 4, "17", :orange), (4, 4, "18", :white), (5, 4, "19", :orange), (6, 4, "20", :white), (7, 4, "21", :white),
    (1, 3, "22", :white), (2, 3, "23", :yellow), (3, 3, "24", :yellow), (4, 3, "25", :white), (5, 3, "26", :white), (6, 3, "27", :white), (7, 3, "28", :white),
    (1, 2, "29", :white), (2, 2, "30", :white)
]

# Draw calendar cells
for (x, y, day, color) in calendar_data
    poly!(cal_ax, Point2f[(x-0.5, y-0.5), (x+0.5, y-0.5), (x+0.5, y+0.5), (x-0.5, y+0.5)], color = color, strokecolor = :black, strokewidth = 1)
    text!(cal_ax, x, y, text = day, fontsize = 10)
end

# Side panel with interactive buttons - create a nested grid layout
side_grid = GridLayout(calendar[1, 2], tellwidth=false, tellheight=false)

toggle_btn = Toggle(side_grid[1, 1], active = false)
Label(side_grid[1, 1], "Deact info", valign = :bottom, fontsize = 10, halign = :right, tellwidth=false, tellheight=false)

btn_stripes = Button(side_grid[2, 1], label = "Stripes", width = 120, height = 25)
btn_refunds = Button(side_grid[3, 1], label = "Refunds", width = 120, height = 25)
btn_monthly = Button(side_grid[4, 1], label = "Monthly", width = 120, height = 25)
btn_add_row = Button(side_grid[5, 1], label = "Add a row", width = 120, height = 25)
btn_add_cur = Button(side_grid[6, 1], label = "Add a cur", width = 120, height = 25)
btn_pdf_man = Button(side_grid[7, 1], label = "Pdf manman", width = 120, height = 25)
btn_pdf_aum = Button(side_grid[8, 1], label = "Pdf AUM", width = 120, height = 25)
btn_transcript = Button(side_grid[9, 1], label = "Transcript", width = 120, height = 25)

# Add interactive callbacks
on(select_btn.clicks) do _
    println("Select clicked - Year: ", year_menu.selection[], " Month: ", month_menu.selection[])
end

on(btn_stripes.clicks) do _
    println("Stripes clicked!")
end

on(btn_refunds.clicks) do _
    println("Refunds clicked!")
end

on(btn_monthly.clicks) do _
    println("Monthly clicked!")
end

on(btn_add_row.clicks) do _
    println("Add a row clicked!")
end

on(btn_add_cur.clicks) do _
    println("Add a cur clicked!")
end

on(btn_pdf_man.clicks) do _
    println("Pdf manman clicked!")
end

on(btn_pdf_aum.clicks) do _
    println("Pdf AUM clicked!")
end

on(btn_transcript.clicks) do _
    println("Transcript clicked!")
end

on(toggle_btn.active) do active
    println("Deact info toggled: ", active)
end

# Adjust column sizing to make sidebar smaller
colsize!(calendar, 2, Auto(0.2))

# Display the figure
display(fig)

3 Likes

@sdanish. OHHHHH!!! You made the job for me :slightly_smiling_face: