• Opret dig
  • Glemt adgangskode

User account menu

  • Artikler
  • Forside
  • Forum
  • Nyheder
  • Log ind
Hjem
LinuxIN.dk

Snak med

Opret dig!

Af dbuch | 11.06.2012 13:57

Et sted skal man vel starte :)

Programmering
Nå nu har jeg kastede mig ud i lidt vala alligevel, og vil lave et program som kan oversætte dansk til Røversprog (En sjov lille ting som var "in" i mine unge dage).

using Gtk;

public class Piratsprog : Window {

public Piratsprog ()
{
this.title = "Oversæt Dansk til Røver Sprog";
this.window_position = WindowPosition.CENTER;
this.destroy.connect (Gtk.main_quit);
this.border_width = 8;
set_default_size (700, 20);
var button = new Button.with_label ("Translate!");
var Input_textbox = new Gtk.Entry();
var Output_textbox = new Gtk.Entry();
var vbox = new Box (Orientation.VERTICAL, 4);
vbox.add (Input_textbox);
vbox.add (button);
vbox.add (Output_textbox);
add (vbox);
button.clicked.connect (() => {
Output_textbox.set_text("Så langt så godt!");
});
}
public static int main (string[] args)
{
Gtk.init (ref args);

var window = new Piratsprog ();
window.show_all ();

Gtk.main ();
return 0;
}
}


Har selv programeret GUI, ved hjælp af bl.a. Vala - Documentation og Vala tutorial og så i nok kan se er jeg ikke nået langt med at connecte de ting der er nødvendigt.
Men Koden kan compiles med valac --pkg gtk+-3.0 pirat.vala med det behøver jeg vel ikke fortælle :)

Kunne godt tænke mig lidt feedback og tips - Er jeg fuldstændig lost?
  • Log ind eller opret dig for at tilføje kommentarer

Kommentarer18

# 1

13 år siden

Permalink

Indsendt af phomes den 11. juni 2012 kl. 14:05

Permalink

Det ser udmærket ud :)
Hvis

Det ser udmærket ud :)

Hvis du vil være lidt moderne kan du lavet det til en GtkApplication:
(jeg har ikke forsøgt at compile det)

using Gtk;

public class Piratsprog : Application {

public Piratsprog ()
{
Object (application_id: "dk.linuxin.piratsprog", flags: ApplicationFlags.FLAGS_NONE);
}

protected override void startup ()
{
base.startup ();

var window = new ApplicationWindow();
window.title = "Oversæt Dansk til Røver Sprog";
window.window_position = WindowPosition.CENTER;
window.border_width = 8;
window.set_default_size (700, 20);

add_window (window);

var button = new Button.with_label ("Translate!");
var Input_textbox = new Gtk.Entry();
var Output_textbox = new Gtk.Entry();

var vbox = new Box (Orientation.VERTICAL, 4);
vbox.add (Input_textbox);
vbox.add (button);
vbox.add (Output_textbox);
add (vbox);

button.clicked.connect (() => {
Output_textbox.set_text("Så langt så godt!");
});
}

public override void activate ()
{
window.present ();
}

public static int main (string[] args)
{
Gtk.init (ref args);

var app = new Piratsprog ();
return app.run ();
}
}
  • Log ind eller opret dig for at tilføje kommentarer

# 2

13 år siden

Permalink

Indsendt af dbuch den 11. juni 2012 kl. 14:20

Permalink

#2 Og hvad indebærer det?

#2 Og hvad indebærer det?
  • Log ind eller opret dig for at tilføje kommentarer

# 3

13 år siden

Permalink

Indsendt af phomes den 11. juni 2012 kl. 14:49

Permalink

Først og fremmest

Først og fremmest registrerer den navnet "dk.linuxin.piratsprog" til dit program. Det gør det nemt i fremtiden at udstille funktioner som andre processer kan kalde på dit program. Den hypigste brug her er en "app menu". Dvs. en menu i gnome-shell eller unity.

Derudover overvåger den dine "toplevel windows". Når den sidste af dem bliver lukket vil programmet automatisk stoppe. Bemærk at der ikke længere er denne del:
this.destroy.connect (Gtk.main_quit);

Du kan også styre om programmet skal tillade mange instanser, eller om der kun må køre 1 ad gangen.

Når maskinen lukkes ned kan du bruge gtkapplication til automatisk at gemme eller forsøge at stoppe/udsætte nedlukning. Smart til arbejde der ikke er gemt eller f.eks. en cd-brænder der er i gang.

Der er mange små nice-to-have's. Generelt set er det den anbefalede måde at starte et program på i dag.
  • Log ind eller opret dig for at tilføje kommentarer

# 4

13 år siden

Permalink

Indsendt af phomes den 11. juni 2012 kl. 15:00

Permalink

her kan du se hvordan du

her kan du se hvordan du bruger gtkapplication til at lave en lillle app menu. Der er bare about og quit:


using Gtk;

public class Piratsprog : Application {

private ApplicationWindow window;

//sæt actions til at pege på metode-kald i din app
private const GLib.ActionEntry[] action_entries =
{
{ "about-action", about_cb },
{ "quit-action", quit_cb }
};

public Piratsprog ()
{
Object (application_id: "dk.linuxin.piratsprog", flags: ApplicationFlags.FLAGS_NONE);
add_action_entries (action_entries, this);
}

protected override void startup ()
{
base.startup ();

window = new ApplicationWindow();
window.title = "Oversæt Dansk til Røver Sprog";
window.window_position = WindowPosition.CENTER;
window.border_width = 8;
window.set_default_size (700, 20);

add_window (window);

var button = new Button.with_label ("Translate!");
var Input_textbox = new Gtk.Entry();
var Output_textbox = new Gtk.Entry();

var vbox = new Box (Orientation.VERTICAL, 4);
vbox.add (Input_textbox);
vbox.add (button);
vbox.add (Output_textbox);
add (vbox);

button.clicked.connect (() => {
Output_textbox.set_text("Så langt så godt!");
});

//gør dine actions tilgængelige for ipc
var menu = new Menu ();
menu.append ("About", "app.about-action");
menu.append ("Quit", "app.quit-action");
set_app_menu (menu);
}

public override void activate ()
{
window.present ();
}

//en lille about
private void about_cb ()
{
Gtk.show_about_dialog (window,
"program-name", "Piratsprog",
"comments", "Grrrrr",
"authors", "boogie",
null);
}

//quit kan også ske fra app menuen. Den lukker bare dit vindue og app'en lukker selv derefter
private void quit_cb ()
{
window.destroy ();
}

public static int main (string[] args)
{
Gtk.init (ref args);

var app = new Piratsprog ();
return app.run ();
}
}
  • Log ind eller opret dig for at tilføje kommentarer

# 5

13 år siden

Permalink

Indsendt af phomes den 11. juni 2012 kl. 15:04

Permalink

yuk. "//gør dine actions

yuk. "//gør dine actions tilgængelige for ipc" skulle stå ved add_action_entries. Kommentarer som en eftertanke... ikke smukt.

(har ikke compilet forøvrigt)
  • Log ind eller opret dig for at tilføje kommentarer

# 6

13 år siden

Permalink

Indsendt af dbuch den 11. juni 2012 kl. 16:27

Permalink

Okay det vil jeg kigge på,

Okay det vil jeg kigge på, og det skal selvfølgelig med - man skal jo være med på moden :)

Et spørgsmål til, nu har jeg jo brugt timer på det og compilede et utal af gange med fejl og mangler, men alt det her public, private, public static - ved jeg egentligt ikke så meget om - Hvor kan jeg finde det? Så jeg kan lære det fra bunden. Vil jo gerne blive dygtig og være med på hvorfor det ene bliver valgt frem for det andet. Hjælp endelig en ny Programmør på rette vej, tak :)
  • Log ind eller opret dig for at tilføje kommentarer

# 7

13 år siden

Permalink

Indsendt af slettet16019 den 11. juni 2012 kl. 16:55

Permalink

#6

#6 Scope

https://live.gnome.org/Vala/Manual/Classes#Class_scope

Hurtige Eksempler:
public -metoden kan kaldes fra hvilket som helst sted i din kode
private - kan kun kaldes af klassen selv
public static - samme som ovennævnte, men man behøver ikke et objekt af klassen
protected - kan kun kaldes af klassen selv og dens sub-klasser.
  • Log ind eller opret dig for at tilføje kommentarer

# 8

13 år siden

Permalink

Indsendt af dbuch den 11. juni 2012 kl. 19:50

Permalink

using Gtk;
public class

using Gtk;

public class Roeversprog : Application {

private ApplicationWindow window();

private const Gtk.ActionEntry[] action_entries =
{
{ "about-action", about_cb },
{ "quit-action", quit_cb }
};

public Roeversprog ()
{
Object (application_id: "dk.linuxin.Roeversprog", flags: ApplicationFlags.FLAGS_NONE);
add_action_entries (action_entries, this);
}

protected override void startup ()
{
base.startup ();

window = new ApplicationWindow();

window.title = "Oversæt Dansk til Røver Sprog";
window.window_position = WindowPosition.CENTER;
window.border_width = 8;
window.set_default_size (700, 20);

add_window (window);

var button = new Button.with_label ("Translate!");
var Input_textbox = new Gtk.Entry();
var Output_textbox = new Gtk.Entry();
var vbox = new Box (Orientation.VERTICAL, 4);

vbox.add (Input_textbox);
vbox.add (button);
vbox.add (Output_textbox);
add (vbox);

button.clicked.connect (() => {
Output_textbox.set_text("Så langt så godt!");
});

var menu = new Menu();
menu.append ("About", "app.about-action");
menu.append ("Quit", "app.quit-action");
set_app_menu (menu);
}

public override void activate ()
{
window.present ();
}
private void about_cb ()
{
Gtk.show_about_dialog (window,
"program-name", "Piratsprog",
"comments", "Grrrrr",
"authors", "boogie",
null);
}
public static int main (string[] args)
{
Gtk.init (ref args);

var app = new Roeversprog ();

return app.run();
}
}


med --pkg Gtk+-3.0

#5 jeg får: error: `Application' is an ambiguous reference between `GLib.Application' and `Gtk.Application' public class Roeversprog : Application {

Og nu er jeg lost :)
  • Log ind eller opret dig for at tilføje kommentarer

# 9

13 år siden

Permalink

Indsendt af slettet16019 den 11. juni 2012 kl. 20:27

Permalink

#8Jeg ved godt du ikke

#8

Jeg ved godt du ikke spørger mig, men jeg svarer nu alligevel :)

Fejlen får du, da compileren ikke ved om det er GLib.Application eller Gtk.Application din klasse Roeversprog nedarver fra.
Der står i den tutorial jeg linker til nedenunder, at Glib er importeret som default. Prøv evt. at angive eksplicit at det er Gtk.Application der nedarves fra.

Du kan læse mere her: https://live.gnome.org/Vala/Tutorial#Namespaces

(OBS: Dette er ikke afprøvet)
  • Log ind eller opret dig for at tilføje kommentarer

# 10

13 år siden

Permalink

Indsendt af phomes den 11. juni 2012 kl. 21:47

Permalink

Helistorm har helt ret. Der

Helistorm har helt ret. Der er en Application i både glib og gtk. Den i gtk er faktisk en udvidelse af glib's. Det er den i gtk vi vil bruge til et grafisk program, så der skal lige sættes "Gtk." foran. Det samme problem var der med Menu. Der var et par andre små ting.

Her er noget der virker:

using Gtk;

public class Roeversprog : Gtk.Application {

private ApplicationWindow window;

private const GLib.ActionEntry[] action_entries =
{
{ "about-action", about_cb },
{ "quit-action", quit_cb }
};

public Roeversprog ()
{
Object (application_id: "dk.linuxin.Roeversprog", flags: ApplicationFlags.FLAGS_NONE);
add_action_entries (action_entries, this);
}

protected override void startup ()
{
base.startup ();

window = new ApplicationWindow(this);

window.title = "Oversæt Dansk til Røver Sprog";
window.window_position = WindowPosition.CENTER;
window.border_width = 8;
window.set_default_size (700, 20);

add_window (window);

var button = new Button.with_label ("Translate!");
var Input_textbox = new Gtk.Entry();
var Output_textbox = new Gtk.Entry();
var vbox = new Box (Orientation.VERTICAL, 4);

vbox.add (Input_textbox);
vbox.add (button);
vbox.add (Output_textbox);
window.add (vbox);

button.clicked.connect (() => {
Output_textbox.set_text("Så langt så godt!");
});

var menu = new GLib.Menu();
menu.append ("About", "app.about-action");
menu.append ("Quit", "app.quit-action");
set_app_menu (menu);

window.show_all ();
}

public override void activate ()
{
window.present ();
}

private void about_cb ()
{
string[] authors = { "Boogie" };

Gtk.show_about_dialog (window,
"program-name", "Piratsprog",
"comments", "ARhhhhg",
"authors", authors,
null);
}

private void quit_cb ()
{
window.destroy ();
}

public static int main (string[] args)
{
Gtk.init (ref args);

var app = new Roeversprog ();
return app.run();
}
}
  • Log ind eller opret dig for at tilføje kommentarer

# 11

13 år siden

Permalink

Indsendt af dbuch den 11. juni 2012 kl. 22:26

Permalink

#9 Helt fint, suger bare til

#9 Helt fint, suger bare til mig.. Vil se og blive dygtig, så jeg kan hjælpe med evt. løse ender (Hvis mit projekt med at skrive og forstå gtk applicationer, og i det hele taget det at programmere)

Kommer nok mange spørgsmål hen ad vejen, håber i har tålmodighed :)

#10 Perfekt.

Egentligt var jeg inde og prøve selv om det var dét, manglede bare GLib menu.

Kan se du også lavede lidt om her:

private void about_cb ()
{
string[] authors = { "Boogie" };

Gtk.show_about_dialog (window,
"program-name", "Piratsprog",
"comments", "Oversæt Dansk til Rørver Sprog",
"authors", authors,
null);
}


kan se det lavede authors om til en string, korrekt? Men hvorfor?
  • Log ind eller opret dig for at tilføje kommentarer

# 12

13 år siden

Permalink

Indsendt af thn den 12. juni 2012 kl. 00:24

Permalink

string[] authors = {

string[] authors = { "Boogie" };

Det er bare en liste (Et String Array) med navne på skaberne af programmet.
Lidt overflødigt, hvis det kun er dig.
  • Log ind eller opret dig for at tilføje kommentarer

# 13

13 år siden

Permalink

Indsendt af phomes den 12. juni 2012 kl. 00:41

Permalink

Da jeg skrev det første

Da jeg skrev det første gang var det ud fra løs hukommelse. Det jeg fik skrevet ville ikke kunne compile, så derfor skulle det rettes.

API'en forventer en string array:
http://developer.gnome.org/gtk3/unstable/GtkAboutDialog.html#GtkAboutDi…

  • Log ind eller opret dig for at tilføje kommentarer

# 14

13 år siden

Permalink

Indsendt af dbuch den 12. juni 2012 kl. 19:08

Permalink

       

button.clicked.connect (() => {
var result = Input_textbox.text;
Output_textbox.set_text(result);
});


Nu har jeg sat dette ind under, "protected override void startup ()" klassen. Er det rigtigt approach eller skulle man gøre det anderledes? tænker og sætte "button" funktionen i en ny class eller noget, Må også hellere have lidt tips hvordan man manipulere med result.

i = input(str())
x = (len(i))
print(i + ', ' + i + ', ' + 'bo-b' + i[1:x])
print('banana-fana fo-f' + i[1:x])
print('fee-fi-mo-m' + i[1:x])
print(i + '!')


Her er et eksempel jeg har lavet i Python. nogle tips
  • Log ind eller opret dig for at tilføje kommentarer

# 15

13 år siden

Permalink

Indsendt af phomes den 13. juni 2012 kl. 16:44

Permalink

Boogie:
Du skriver i en

Boogie:

Du skriver i en anden tråd, at du gerne vil hjælpe lidt til på gnome. Hvad siger du til at vi sætter piratsprog lidt på pause og fortsætter med at lave en feature på gnome-games?

Jeg skal nok hjælpe dig i gang og rådgive hen ad vejen. Du er velkommen til at skrive en mail til mig på min gmail af samme navn.
  • Log ind eller opret dig for at tilføje kommentarer

# 16

13 år siden

Permalink

Indsendt af dbuch den 13. juni 2012 kl. 17:31

Permalink

#15 synes jeg er en rigtig

#15 synes jeg er en rigtig god ide - Hvis man læser lidt mellem linjerne på mine posts, så kan man vel også fornemme jer er lidt ude efter en mentor :)
  • Log ind eller opret dig for at tilføje kommentarer

# 17

13 år siden

Permalink

Indsendt af dbuch den 13. juni 2012 kl. 17:39

Permalink

Phomes: Nu skal jeg lige

Phomes: Nu skal jeg lige have din mail, og lidt info hvor jeg skal starte :) Og så vi så tage den dér fra
  • Log ind eller opret dig for at tilføje kommentarer

# 18

13 år siden

Permalink

Indsendt af phomes den 13. juni 2012 kl. 17:41

Permalink

Jeg skal gerne være mentor.

Jeg skal gerne være mentor. Min mail er [mit brugernavn]@gmail.com
  • Log ind eller opret dig for at tilføje kommentarer

Svar søges

llumos Unix-operativsystem, 0
Den er go 0
14. februar = I Love Free Software Day 0
Lokal fil-deling - for de dovne. 0
Linux fra begynder til professionel af O'Reilly 0

Seneste aktivitet

"Intet realistisk alternativ" - mig i r*ven 16
Gode anmeldelser Zorin OS 17.3 8
Open Source-eksperimentet 5
En snak om Linux-kompatibel software 7
Nulstilling af adgangskode 6
Virtuel maskine? 2
PCLinuxOS 27
Ingen Mint 5
Linux App Store Flathub når 3 milliarder downloads 2
Digitaliseringsministeriet sætter gang i pilotprojekt om digital suverænitet 3
Mest sikker webbrowser 5
Firefox 2
Privatbeskeder 7
Backup/synkronisering? 3
BigLinux 5
Chatgpt satire 1
Læsning af databasefil i Firefox 2
Vanilla OS 15
Pepsi Challenge 4
Linuxin er nu migreret til Drupal 11 13

© 2025 Linuxin og de respektive skribenter

Oprettet og drevet af nørder siden 2004 !