إنشاء تطبيق سطح مكتب باستخدام Golang و Fyne

اليوم سنقوم بتطوير تطبيق سطح المكتب على Golang


إن تطوير تطبيق golang لسطح المكتب ليس مهمة نموذجية لمبرمج golang. لا يوجد الكثير من المكتبات المفتوحة المصدر الجاهزة الجاهزة لـ Google لحلها بناءً على طلب سطح المكتب golang ، أمثلة لما تم العثور عليه:

  1. غوتك
  2. فاين
  3. Gxui

تم اختيار Fyne ، نظرًا لأن مستودع جيثب لهذا المشروع يحتوي على أكبر عدد من النجوم ، كما أنه يدعم تصميم المواد سيئة السمعة.

دعونا نرى ما هي الخيارات لعرض الواجهة التي توفرها لنا.

الحاجيات التالية متاحة من الصندوق:

  • زر.
  • حاوية (لتجميع الحاجيات الفرعية وتوجيهها أفقياً أو رأسياً).
  • خانة اختيار ، حقول لإدخال نص أو كلمة مرور.
  • النماذج والمجموعات.
  • ارتباط تشعبي.
  • الرمز.
  • الملصق.
  • شريط التقدم.
  • حاوية قابلة للتمرير.
  • مفتاح كهربائي.
  • تحديد
  • نوافذ التبويب.
  • شريط الأدوات.

في حالة عدم العثور على العناصر الضرورية ، من الممكن تنفيذ عناصر واجهة مستخدم مخصصة باستخدام واجهة برمجة تطبيقات بسيطة.

دعونا نحاول كتابة تطبيق golang gui لعرض توقعات الطقس للأيام القليلة القادمة باستخدام Fyne. يمكن العثور على رمز التطبيق الكامل على الرابط الموجود على github.

بادئ ذي بدء ، قم بإنشاء مشروع فارغ على Golang وتثبيت Fyne.

go get fyne.io/fyne

نظرًا لأن التطبيق سيعرض معلومات الطقس ، فأنت بحاجة إلى الحصول على هذه المعلومات. للقيام بذلك ، انتقل إلى Open API Map API.

func getWeatherForecast(result interface{}) error {
  var url = fmt.Sprintf("https://api.openweathermap.org/data/2.5/forecast?q=Voronezh&cnt=4&units=metric&appid=%s", openWeatherMapApiKey) //    
  response, err := http.Get(url)
  if err != nil {
     fmt.Print(err)
  }
  defer response.Body.Close()
  return json.NewDecoder(response.Body).Decode(result)
}

لتخزين البيانات ، يمكنك استخدام البنية التالية (حيث تركت بعض الحقول التي ترجعها واجهة برمجة التطبيقات فقط) ، يجدر الانتباه إلى حقيقة أن جميع حقول الهيكل مكتوبة بالأحرف الكبيرة ، ولكن في استجابة واجهة برمجة التطبيقات ، يتم وصفها بواحد صغير.

type WeatherInfo struct {
  List []WeatherListItem `json:list`
}

type WeatherListItem struct {
  Dt      int           `json:dt`
  Main    WeatherMain   `json:main`
  Weather []WeatherType `json:weather`
}

type WeatherMain struct {
  Temp      float32 `json:temp`
  FeelsLike float32 `json:feels_like`
  Humidity  int     `json:humidity`
}

type WeatherType struct {
  Icon string `json:icon`
}

الآن يمكننا تلقي بيانات الطقس في شكل هيكل. يبقى تنفيذ واجهة تطبيق سطح المكتب golang.

func setupUi(weatherInfo WeatherInfo) {
  app := app.New()

  w := app.NewWindow("   ")

  var vBox = widget.NewVBox() //        

  for i := 0; i < len(weatherInfo.List); i++ {
     var weatherForDay = weatherInfo.List[i] //     
     var weatherMainGroup = widget.NewVBox(
        widget.NewLabel(fmt.Sprintf(": %.2f °C", weatherForDay.Main.Temp)),
        widget.NewLabel(fmt.Sprintf(" : %.2f °C", weatherForDay.Main.FeelsLike)),
        widget.NewLabel(fmt.Sprintf(": %d%%", weatherForDay.Main.Humidity)),
     ) //  3    

     var weatherTypeGroup = widget.NewVBox()
     for weatherTypeI := 0; weatherTypeI < len(weatherForDay.Weather); weatherTypeI++ {
        var resource, _ = fyne.LoadResourceFromURLString(fmt.Sprintf("http://openweathermap.org/img/wn/%s.png", weatherForDay.Weather[weatherTypeI].Icon)) //   ,   
        var icon = widget.NewIcon(resource)
        weatherTypeGroup.Append(icon)
     }

     var time = time2.Unix(int64(weatherInfo.List[i].Dt), 0).String()
     vBox.Append(widget.NewGroup(time)) 
     vBox.Append(widget.NewHBox(weatherMainGroup, weatherTypeGroup))
  }
  vBox.Append(widget.NewButton("", func() {
     app.Quit()
  }))

  w.SetContent(vBox) //    

  w.ShowAndRun() //   
}

ننشئ هنا أدواتنا ونملأها بالبيانات ونجمعها في مجموعات لتنظيم الترتيب الذي يتم عرضها به.

منجز.

يبقى فقط لتشغيل التطبيق ومعرفة كيف يبدو. نظرًا لأن إطار العمل متعدد المنصات ، يمكنك تشغيله على كل من Windows و macOS و Linux.

صورة
تم إطلاق تطبيق golang mac os

صورة
ويبدو أنه تطبيق golang windows

ونتيجة لذلك ، اتضح إنشاء تطبيق سطح مكتب golang بسيط عبر الأنظمة الأساسية ، وتجربة Fyne في العمل. لسوء الحظ ، من الصعب التفكير في الذهاب كلغة مناسبة لتطوير تطبيقات سطح المكتب الحديثة ، ومع ذلك ، من المثير للاهتمام دائمًا لمس شيء جديد وغير عادي في الممارسة.

شكرا لكم جميعا على اهتمامكم.

All Articles