برنامه نویسی

Ruby GUI with Glimmer – DEV Community

از اولین باری که وارد توسعه و برنامه نویسی شدم، همیشه احساس می کردم که می خواهم رابط کاربری گرافیکی خود را ایجاد کنم. خواه برای چیزی به سادگی تقلب در یک بازی فلش 🦹🏽‍♂️ باشد یا چیز مفیدتری مانند تنظیم تایمر یا محاسبه هزینه ها، ایجاد یک برنامه با یک رابط واقعی همیشه برای من جالب است. قبل از این من از PythonAutoGUI و دیگران استفاده کرده بودم. با این حال، چند هفته پیش، من به طور تصادفی به یک کتابخانه روبی برخوردم که ایجاد یک رابط کاربری گرافیکی کاملاً کاربردی را بسیار آسان می کند. بدیهی است که باید آن را امتحان می کردم. بنابراین در این پست، نحوه استفاده از این کتابخانه برای ایجاد یک مبدل ارز ساده را توضیح خواهم داد.

پیش نمایش برنامه
مرور کد:
ابتدا نصب و اضافه کردن را نصب کنید glimmer-dsl-libui گوهر، dotenv gemو چند کتابخانه استاندارد دیگر برای مدیریت URL ها، درخواست های HTTP و تجزیه JSON. من از Dotenv استفاده می کنم و یک فایل .env محلی را در پروژه خود با نگه داشتن API_KEY بارگیری می کنم.

# Requirements
require 'glimmer-dsl-libui'
require 'dotenv'
require 'uri'
require 'net/http'
require 'json'

Dotenv.load
include Glimmer
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله بعدی تعریف ارزها و مقادیر پایه ای بود که می خواهم با آنها کار کنم.

# DATA
currencies = ['USD', 'EUR', 'SEK', 'JPY', 'KRW']
base_values = ['USD', 'EUR', 'SEK', 'JPY', 'KRW']
currencies = currencies.join('%2C%20')

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس باید مطمئن می شدم که از مقادیر بالا استفاده می کنم و روشی ایجاد می کنم که مقادیر این ارزها را از API انتخابی من واکشی می کند، و سپس از این داده ها برای ایجاد آیتم هایی برای هر ارز استفاده می کنم که شامل نماد، نرخ و ارزش نگهدارنده مکان است. 0. این موارد در یک آرایه ذخیره می شوند که در انتها برگردانده می شود.

def get_data(currency_array, base)
  data = []
  url = URI("https://api.apilayer.com/exchangerates_data/latest?symbols=#{currency_array}&base=USD")

  https = Net::HTTP.new(url.host, url.port)
  https.use_ssl = true

  request = Net::HTTP::Get.new(url)
  request['apikey'] = ENV['API_KEY']

  response = https.request(request)
  response_hash = JSON.parse(response.body)

  response_hash['rates'].each do |currency, rate|
    item = [currency, rate, 0]
    data.append(item)
  end
  data
end
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

حالا به بلوک کد اصلی بروید. در اینجا ما متد get_data را فراخوانی می کنیم که در آرایه ارزها عبور می کند و USD به عنوان استدلال این داده‌های نرخ ارز به‌روز شده را برای ارزهای مشخص شده نسبت به بازیابی می‌کند USD.

# Fetches the exchange rate for each currency to USD.
updated_data = get_data(currencies, 'USD')
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در مرحله بعد، پنجره برنامه با استفاده از روش window از قسمت ایجاد می شود glimmer کتابخانه من آن را نیز نامگذاری کرده ام و ابعاد پنجره را تنظیم کرده ام.

در داخل پنجره، یک کادر عمودی برای نگه داشتن جدول و فیلد ورودی، اساساً مانند یک “شبکه” ایجاد می کنیم. جدول با استفاده از روش جدول ایجاد می شود و از سه ستون “ارز”، “ارزش بازار” و “ارزش تبدیل شده” تشکیل شده است.

سپس با استفاده از cell_rows روش، ما در عبور updated_data_array.

window('Currency Converter', 1080, 800) {
  vertical_box {
    table {
      text_column('Currency')
      text_column('Market Value')
      text_column('Converted Value')

       cell_rows updated_data
    }
#...
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در پایین برنامه، یک فیلد ورودی با استفاده از آن اضافه کردم search_entry روش. این فیلد ورودی مقداری را برای تبدیل وارد کنید.

را stretch false تقریباً فقط یک بوول است که به فیلد ورودی می گوید که به صورت عمودی کشیده نشود.

 # Input Field
    search_entry { |value|
      stretchy false
#...
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای اینکه فیلد ورودی به تغییرات “پاسخگو” باشد، یک بلوک on_changed تعریف کردم. به طور خلاصه بلوک مقدار را در قسمت ورودی می گیرد و آرایه داده را کپی می کند و آن را با آرایه به روز شده جایگزین می کند.

 # Action on input
      on_changed do
        new_value = value.text
        new_data ||= updated_data.dup
#...
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس روی هر مورد ارز در new_data تکرار می کنیم و ارزش تبدیل شده را بر اساس ورودی جدید به روز می کنیم. مقدار تبدیل شده محاسبه شده و به دو اعشار گرد می شود. سپس مقادیر به‌روزرسانی شده در آرایه new_data که در برنامه ارائه می‌شود، ذخیره می‌شوند.

# Iterates over each of the currencies added, and replaces the default "0" with the actual value.
        new_data.each do |currency|
          currency[2] = 0
          new_total = (currency[2]) + new_value.to_i * currency[1]
          currency[2] = new_total.round(2)
        end
      end
    }
  }
}.show
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این تمام چیزی است که واقعا وجود دارد. امتحان کردن یک کتابخانه کاملاً جدید که قبلاً هیچ تجربه ای از آن نداشتم یا قبلاً در مورد آن چیزی نشنیده بودم و فقط با استفاده از اسناد ارائه شده کشف کردم، سرگرم کننده بود.

شما می توانید کد کامل را در اینجا پیدا کنید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا