مهرداد محمدیان
مهرداد محمدیان
خواندن ۲ دقیقه·۵ سال پیش

ساخت اپلیکیشن گرافیکی (GUI) با زبان Golang قسمت سوم

GUI in Golang
GUI in Golang

تا اینجا ۲ قسمت از این مطلب رو گذروندیم و چیز های باحال و ساده رو با هم بررسی کردیم ...
توی این قسمت میخوایم در مورد اسکرین About و پکیج sound که داخل قسمت قبلی معرفیش کردیم و ازش استفاده کردیم صحبت کنیم.

اگر قسمت قبل رو نخوندی:

https://virgool.io/@mehrdad.dev/golang-gui-2-i0hyq9ruecwy
https://github.com/mehrdad-dev/Jami

و همچنین ریپویی که در موردش صحبت می‌کنیم.


اسکرین About

func AboutScreen(a fyne.App) fyne.CanvasObject { filePath, err := filepath.Abs(&quot../Jami/assets/about.png&quot) if err != nil { fmt.Println(&quotERR in read about.png &quot, err) } logo := canvas.NewImageFromFile(filePath) logo.SetMinSize(fyne.NewSize(390, 212)) return widget.NewVBox( widget.NewHBox(layout.NewSpacer(), logo, layout.NewSpacer()), widget.NewLabelWithStyle(&quotJami is not just a musical instrument&quot, fyne.TextAlignCenter, fyne.TextStyle{Bold: false}), widget.NewHBox(layout.NewSpacer(), widget.NewHyperlink(&quotgithub&quot, parseURL(&quothttps://github.com/mehrdad-dev&quot)), widget.NewLabel(&quot-&quot), widget.NewHyperlink(&quotcontact&quot, parseURL(&quothttp://www.mehrdad-dev.ir/contact-me/&quot)), layout.NewSpacer(), ), )}

کد بالا تمام کدی هست که تابع AboutScreen داره.
اول از همه لوگو پروژه جامی رو باز کردیم و بعدش با استفاده از متد NewImageFromFile عکس رو اضافه می‌کنیم و سایزش رو تغییر میدیم.
از این جا تا آخر با استفاده از NewVBox یک باکس vertical یا همون عمودی رو برمی‌گردونیم.
که خود این باکس شامل یک باکس عرضی حاوی لوگو، یک لیبل زیر لوگو که با استفاده از متد NewLabelWithStyle ایجاد کردیم.
و دوباره ساخت یک باکس عرضی با استفاده از NewHBox که شامل ۲ تا هایپر لینک هست و با استفاده از NewHyperlink هم این دو رو ساختیم.
در نهایت یک فضای خالی هم بعد از همه باکس ها ایجاد می‌کنیم.

درباره جامی
درباره جامی

که در نهایت به چنین صفحه ای می‌رسیم.

پکیج Sound

خوب یادتونه که توی قسمت قبلی از این پکیج استفاده کردیم که شامل ۲ تا تابع هست.
که ابتدا تابع PlayNotes رو بررسی می‌کنیم.

// PlayNotes play a string of notes func PlayNotes(notes string) { music := beep.NewMusic(&quot&quot) volume := 100 if err := beep.OpenSoundDevice(&quotdefault&quot); err != nil { log.Fatal(err) } if err := beep.InitSoundDevice(); err != nil { log.Fatal(err) } //beep.PrintSheet = true this is a comment ! defer beep.CloseSoundDevice() reader := bufio.NewReader(strings.NewReader(notes)) go music.Play(reader, volume) music.Wait() beep.FlushSoundBuffer() }

ابتدا با استفاده ازکتابخونه beep یک موزیک جدید رو ایجاد کردیم، که میتونه به عنوان یک فایل هم ذخیره بشه اگر بهش استرینگ خالی ندیم.
بعد از اون با استفاده از ۲ تابع OpenSoundDevice و InitSoundDevice از beep سخت افزار رو برای پخش نت هامون آماده کردیم، و با استفاده از Play که داخل یک goroutine اجرا شده و یک خواننده از بافر گرفته و میزان صدا که از متغیر volume میاد، نت هامون رو پخش می‌کنیم.

تابع SaveNotes هم دقیقا شبیه به تابع قبلیه اما فقط به جای استرینگ خالی NewMusic اسم فایل رو با پسوند wav قرار بدید.


ممنون از اینکه تا اینجا دنبال کردی :)))))))
اگر مطالب مفید بود اینجا می‌تونید حمایت کنید :)))

گولنگاپلیکیشناپلیکیشن گولنگgolanggui
در حال کانفیگ ...
شاید از این پست‌ها خوشتان بیاید