Ξεκινώντας

July 18, 2026 · View on GitHub

Θέλετε να δημιουργήσετε μια εφαρμογή για υπολογιστές στο Go. Ήρθατε στο σωστό μέρος


Προαπαιτούμενα

Μεταβείτε στο 1.22 ή νεότερο. Ελέγξτε με:

go version

Εάν είστε σε Linux, χρειάζεστε επίσης τρία πακέτα συστήματος. χρήστες macOS και Windows μπορεί να το παραλείψει και να νιώθει αυτάρεσκα:

sudo apt install libwayland-dev libxkbcommon-dev libvulkan-dev

Εγκατάσταση

Στον κατάλογο του έργου σας:

go get github.com/CzaxStudio/proton
go mod tidy

Το βήμα «go mod tidy» είναι σημαντικό — τραβάει τις μεταβατικές εξαρτήσεις του Gio και τα γράφει στο «go.sum». Παραλείψτε το και θα δείτε παντού κόκκινα σκουπίδια.


Το πρώτο σας παράθυρο

package main

import "github.com/CzaxStudio/proton"

func main() {
    a := proton.New("hello")
    a.Window("Hello", 480, 320, func(ctx proton.Context) {
        proton.H3(ctx, "Hello from Proton!") // ⓘ You can change proton.H3 to any size you want
    })
    a.Run()
}
go run .

Εμφανίζεται ένα παράθυρο. Αυτή είναι μια ολοκληρωμένη, λειτουργική εφαρμογή GUI σε 9 γραμμές. Χωρίς XML, χωρίς «εφαρμογές Runnable», χωρίς πλαίσιο ένεσης εξάρτησης, χωρίς πακέτο ιστού.


Προσθήκη κατάστασης

Τα γραφικά στοιχεία που κάνουν κάτι — κουμπιά, εισαγωγή κειμένου, πλαίσια ελέγχου — χρειάζονται μια κατάσταση πεδίο στη δική σας κατασκευή. Δηλώστε τα μια φορά, περάστε δείκτες στα γραφικά στοιχεία.

package main

import (
    "fmt"
    "github.com/CzaxStudio/proton"
)

type UI struct {
    name proton.Editor
    btn  proton.Clickable
}

func main() {
    u := &UI{}

    a := proton.New("greeter")
    a.Window("Greeter", 400, 240, func(ctx proton.Context) {
        proton.Input(ctx, &u.name, "Your name")
        proton.Gap(ctx, 8)
        proton.Pad(ctx, 4, func(ctx proton.Context) {
            if proton.Button(ctx, &u.btn, "Say hello") {
                fmt.Println("Hello,", u.name.Text())
            }
        })
    })
    a.Run()
}

Η συνάρτηση σχεδίασης εκτελεί κάθε καρέ. Το "Button" επιστρέφει "true" στο πλαίσιο του γίνεται κλικ. Το μπλοκ "if" εκτελείται, εκτυπώνει το όνομα και αυτό είναι.


Οι τύποι κατάστασης

Δηλώστε τα στη δομή της διεπαφής χρήστη. Είναι όλα έτοιμα για μηδενική τιμή — χωρίς κατασκευαστές.

type UI struct {
    btn     proton.Clickable    // Button, OutlineButton, Tappable, Link
    name    proton.Editor       // Input, TextArea
    checked proton.Bool         // Checkbox, Toggle
    choice  proton.Enum         // RadioButton group
    vol     proton.Float        // Slider
    scroll  proton.Scrollable   // List, HList, Scroll, TextView, LogView
}

Ένα πεδίο ανά γραφικό στοιχείο. Μην μοιράζεστε ένα «με δυνατότητα κλικ» μεταξύ δύο κουμπιών — θα το κάνουν Και οι δύο ενεργοποιούνται με το ίδιο κλικ, το οποίο σχεδόν ποτέ δεν είναι αυτό που θέλετε.


Πώς λειτουργεί η διάταξη

Χωρίς περιτυλίγματα διάταξης, τα γραφικά στοιχεία στοιβάζονται κάθετα από πάνω προς τα κάτω. «Κενό». προσθέτει χώρο μεταξύ τους.

proton.H4(ctx, "Settings")
proton.Gap(ctx, 12)
proton.Label(ctx, "Adjust your preferences below.")
proton.Gap(ctx, 16)
proton.Divider(ctx)
proton.Gap(ctx, 16)
proton.Toggle(ctx, &u.darkMode, "Dark mode")

Για διάταξη δίπλα-δίπλα, χρησιμοποιήστε τη «Σειρά». Για περισσότερο έλεγχο, ανατρέξτε στο 04-layout.md.


Κουμπιά Χρειάζονται περιτύλιγμα διάταξης

Τα κουμπιά (και άλλα διαδραστικά γραφικά στοιχεία) πρέπει να βρίσκονται μέσα σε ένα βοηθό διάταξης κλικ για να εγγραφείτε σωστά. Αυτό είναι ένα θέμα Gio — το πάσο της διάταξης είναι αυτό καθορίζει τις περιοχές χτυπήματος στην οθόνη.

// correct — button is inside Pad
proton.Pad(ctx, 8, func(ctx proton.Context) {
    if proton.Button(ctx, &u.btn, "Save") {
        save()
    }
})

// also correct — button is inside Row
proton.Row(ctx,
    func(ctx proton.Context) {
        if proton.Button(ctx, &u.btn, "Save") {
            save()
        }
    },
)

Εάν βάλετε ένα κουμπί στο πολύ ανώτερο επίπεδο της κλήρωσης, λειτουργεί χωρίς κανένα περιτύλιγμα, θα τραβήξει αλλά δεν θα ανταποκρίνεται στα κλικ. Το "Pad(ctx, 0, ...)" είναι το ελάχιστο περιτύλιγμα εάν θέλετε μηδενική οπτική επένδυση.


Θέμα

a := proton.New("myapp")
a.ApplyPalette(proton.NordPalette)
a.Window("App", 800, 600, draw)
a.Run()

Έχουν ενσωματωθεί 46 παλέτες. Δείτε το 07-theming.md για όλες και για να φτιάξετε το δικό σας με εξαγωνικούς χρωματικούς κωδικούς.


Πολλά παράθυρα

a := proton.New("app")
a.Window("Main", 800, 600, drawMain)
a.Window("Settings", 400, 300, drawSettings)
a.Run() // opens both

Όλα τα παράθυρα μοιράζονται την ίδια «*Εφαρμογή». Η διαδικασία παραμένει ζωντανή μέχρι όλα τα παράθυρα είναι κλειστά.


Επόμενα βήματα

  • 01-text.md — γραφικά στοιχεία κειμένου
  • 02-buttons.md — κουμπιά και περιοχές με δυνατότητα κλικ
  • 03-inputs.md — πεδία κειμένου, εναλλαγές, ρυθμιστικά
  • 04-layout.md — τακτοποίηση πραγμάτων στην οθόνη
  • 09-examples.md — πλήρη προγράμματα εργασίας προς αντιγραφή