পাইগোবজেক্ট - পার্ট 3 ব্যবহার করে আপনার নিজের ওয়েব ব্রাউজার এবং ডেস্কটপ রেকর্ডার অ্যাপ্লিকেশন তৈরি করুন


লিনাক্স ডেস্কটপের অধীনে পিজিওজেক্ট ব্যবহার করে জিইউআই অ্যাপ্লিকেশন তৈরি করা সম্পর্কে এটি সিরিজের তৃতীয় অংশ। আজ আমরা আমাদের প্রোগ্রামগুলিতে ' ওস ', ' ওয়েবকিট ', ' অনুরোধ ' এবং কিছু উন্নত পাইথন মডিউল এবং লাইব্রেরি ব্যবহার করার বিষয়ে কথা বলব and অন্যদের, প্রোগ্রামিংয়ের জন্য কিছু অন্যান্য দরকারী তথ্যের পাশে।

আরও অগ্রিম অ্যাপ্লিকেশন তৈরি করার বিষয়ে আরও নির্দেশাবলী অবিরত করতে আপনাকে অবশ্যই এখান থেকে সিরিজের এই সমস্ত পূর্ববর্তী অংশগুলি অতিক্রম করতে হবে:

  1. লিনাক্স ডেস্কটপের অধীনে পিজিওজেক্ট - পার্ট 1 ব্যবহার করে জিইউআই অ্যাপ্লিকেশন তৈরি করুন li
  2. লিনাক্সে অগ্রিম পাইগোজেক্ট অ্যাপ্লিকেশন তৈরি করা - পার্ট 2

পাইথনের মডিউলগুলি এবং লাইব্রেরিগুলি খুব দরকারী, কিছু জটিল কাজ করার জন্য অনেকগুলি সাব-প্রোগ্রাম লেখার পরিবর্তে যা অনেক সময় এবং কাজ করে, আপনি কেবল সেগুলি আমদানি করতে পারেন! হ্যাঁ, আপনার প্রোগ্রামে আপনার প্রয়োজনীয় মডিউল এবং লাইব্রেরিগুলি কেবল আমদানি করুন এবং আপনি আপনার প্রোগ্রামটি সম্পূর্ণ করার জন্য প্রচুর সময় এবং প্রচেষ্টা বাঁচাতে সক্ষম হবেন।

পাইথনের জন্য অনেক বিখ্যাত মডিউল রয়েছে, যা আপনি পাইথন মডিউল সূচীতে খুঁজে পেতে পারেন।

আপনি আপনার পাইথন প্রোগ্রামের জন্য গ্রন্থাগারগুলিও আমদানি করতে পারেন, “ gi.repository আমদানি Gtk ” থেকে এই লাইনটি জিটিকে লাইব্রেরিটি পাইথন প্রোগ্রামে আমদানি করে, আরও অনেক লাইব্রেরি রয়েছে যেমন জিডিকে, ওয়েবকিট .. ইত্যাদি are

অগ্রিম জিইউআই অ্যাপ্লিকেশন তৈরি করা হচ্ছে

আজ, আমরা 2 টি প্রোগ্রাম তৈরি করব:

  1. একটি সাধারণ ওয়েব ব্রাউজার; যা ওয়েবকিট লাইব্রেরি ব্যবহার করবে
  2. একটি ডেস্কটপ রেকর্ডার ‘অ্যাভকনভ’ কমান্ড ব্যবহার করে; যা পাইথন থেকে ‘ওএস’ মডিউলটি ব্যবহার করবে

আমি এখন থেকে গ্ল্যাড ডিজাইনারে উইজেটগুলি কীভাবে টেনে আনতে হবে তা ব্যাখ্যা করব না, আমি আপনাকে কেবল যে উইজেটগুলি তৈরি করতে হবে তার নামটি বলব, অতিরিক্তভাবে আমি আপনাকে <বি প্রতিটি প্রোগ্রামের জন্য> .গ্ল্যাড ফাইল এবং নিশ্চিতভাবে পাইথন ফাইল।

একটি ওয়েব ব্রাউজার তৈরি করতে, আমাদের " ওয়েবকিট " ইঞ্জিনটি ব্যবহার করতে হবে, যা ওয়েবের জন্য একটি মুক্ত-উত্স রেন্ডারিং ইঞ্জিন, এটি একই এ ব্যবহৃত হয় ক্রোম / ক্রোমিয়াম , এটি সম্পর্কে আরও তথ্যের জন্য আপনি অফিসিয়াল ওয়েবকিট.আর.আর ওয়েবসাইটে উল্লেখ করতে পারেন।

প্রথমে, আমাদের জিইউআই তৈরি করতে হবে, গ্ল্যাড ডিজাইনার খুলতে হবে এবং নিম্নলিখিত উইজেটগুলি যুক্ত করতে হবে। উইজেটগুলি কীভাবে তৈরি করবেন সে সম্পর্কে আরও তথ্যের জন্য, এই সিরিজের পার্ট 1 এবং পার্ট 2 অনুসরণ করুন (উপরে দেওয়া লিঙ্কগুলি)।

  1. ‘উইন্ডোজ 1’ উইজেট তৈরি করুন
  2. ‘বক্স1’ এবং ‘বক্স ২’ উইজেট তৈরি করুন
  3. ‘বাটন 1’ এবং ‘বাটন 2’ উইজেট তৈরি করুন
  4. ‘এন্ট্রি 1’ উইজেট তৈরি করুন
  5. ‘স্ক্রোলড উইন্ডো 1’ উইজেট তৈরি করুন

উইজেট তৈরি করার পরে, আপনি নিম্নলিখিত ইন্টারফেস পাবেন।

" স্ক্রোলযুক্ত উইন্ডো " উইজেট ব্যতীত নতুন কিছু নেই; এই স্ক্রলড উইন্ডো "উইজেটটি ব্যবহার করে আপনি << ওয়েবকিট ইঞ্জিনকে এর ভিতরে বসানোর অনুমতি দেওয়ার জন্য এই উইজেটটি গুরুত্বপূর্ণ, আপনি যখন থাকবেন তখন আপনি অনুভূমিক এবং উল্লম্বভাবে স্ক্রোল করতে সক্ষম হবেন ওয়েবসাইটগুলি ব্রাউজ করুন।

আপনাকে এখন << পিছনে বোতাম " ক্লিক " সিগন্যালে " ব্যাকবটন_ ক্লিক " হ্যান্ডলার যুক্ত করতে হবে, " রিফ্রেশবাটন_ ক্লিক " রিফ্রেশ বোতামে হ্যান্ডলার " ক্লিক সিগন্যাল " এবং " enterkey_ ক্লিক " এন্ট্রিটির জন্য " সক্রিয় " সিগন্যালের হ্যান্ডলার।

ইন্টারফেসের জন্য সম্পূর্ণ .glade ফাইলটি এখানে।

<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.16.1 -->
<interface>
  <requires lib="gtk+" version="3.10"/>
  <object class="GtkWindow" id="window1">
    <property name="can_focus">False</property>
    <property name="title" translatable="yes">Our Simple Browser</property>
    <property name="window_position">center</property>
    <property name="default_width">1000</property>
    <property name="default_height">600</property>
    <property name="icon_name">applications-internet</property>
    <child>
      <object class="GtkBox" id="box1">
        <property name="visible">True</property>
        <property name="can_focus">False</property>
        <property name="orientation">vertical</property>
        <child>
          <object class="GtkBox" id="box2">
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <child>
              <object class="GtkButton" id="button1">
                <property name="label">gtk-go-back</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
                <property name="relief">half</property>
                <property name="use_stock">True</property>
                <property name="always_show_image">True</property>
                <signal name="clicked" handler="backbutton_clicked" swapped="no"/>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">0</property>
              </packing>
            </child>
            <child>
              <object class="GtkButton" id="button2">
                <property name="label">gtk-refresh</property>
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <property name="receives_default">True</property>
                <property name="relief">half</property>
                <property name="use_stock">True</property>
                <property name="always_show_image">True</property>
                <signal name="clicked" handler="refreshbutton_clicked" swapped="no"/>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">True</property>
                <property name="position">1</property>
              </packing>
            </child>
            <child>
              <object class="GtkEntry" id="entry1">
                <property name="visible">True</property>
                <property name="can_focus">True</property>
                <signal name="activate" handler="enterkey_clicked" swapped="no"/>
              </object>
              <packing>
                <property name="expand">True</property>
                <property name="fill">True</property>
                <property name="position">2</property>
              </packing>
            </child>
          </object>
          <packing>
            <property name="expand">False</property>
            <property name="fill">True</property>
            <property name="position">0</property>
          </packing>
        </child>
        <child>
          <object class="GtkScrolledWindow" id="scrolledwindow1">
            <property name="visible">True</property>
            <property name="can_focus">True</property>
            <property name="hscrollbar_policy">always</property>
            <property name="shadow_type">in</property>
            <child>
              <placeholder/>
            </child>
          </object>
          <packing>
            <property name="expand">True</property>
            <property name="fill">True</property>
            <property name="position">1</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>

এখন উপরের কোডটি অনুলিপি করুন এবং এটি আপনার বাড়ির ফোল্ডারে " ui.glade " ফাইলটিতে পেস্ট করুন। এখন “ mywebbrowser.py ” নামে একটি নতুন ফাইল তৈরি করুন এবং এর মধ্যে নিম্নলিখিত কোডটি প্রবেশ করুন, সমস্ত ব্যাখ্যা মন্তব্যে রয়েছে।

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

## Here we imported both Gtk library and the WebKit engine. 
from gi.repository import Gtk, WebKit 

class Handler: 
  
  def backbutton_clicked(self, button): 
  ## When the user clicks on the Back button, the '.go_back()' method is activated, which will send the user to the previous page automatically, this method is part from the WebKit engine. 
    browserholder.go_back() 

  def refreshbutton_clicked(self, button): 
  ## Same thing here, the '.reload()' method is activated when the 'Refresh' button is clicked. 
    browserholder.reload() 
    
  def enterkey_clicked(self, button): 
  ## To load the URL automatically when the "Enter" key is hit from the keyboard while focusing on the entry box, we have to use the '.load_uri()' method and grab the URL from the entry box. 
    browserholder.load_uri(urlentry.get_text()) 
    
## Nothing new here.. We just imported the 'ui.glade' file. 
builder = Gtk.Builder() 
builder.add_from_file("ui.glade") 
builder.connect_signals(Handler()) 

window = builder.get_object("window1") 

## Here's the new part.. We created a global object called 'browserholder' which will contain the WebKit rendering engine, and we set it to 'WebKit.WebView()' which is the default thing to do if you want to add a WebKit engine to your program. 
browserholder = WebKit.WebView() 

## To disallow editing the webpage. 
browserholder.set_editable(False) 

## The default URL to be loaded, we used the 'load_uri()' method. 
browserholder.load_uri("https://linux-console.net") 

urlentry = builder.get_object("entry1") 
urlentry.set_text("https://linux-console.net") 

## Here we imported the scrolledwindow1 object from the ui.glade file. 
scrolled_window = builder.get_object("scrolledwindow1") 

## We used the '.add()' method to add the 'browserholder' object to the scrolled window, which contains our WebKit browser. 
scrolled_window.add(browserholder) 

## And finally, we showed the 'browserholder' object using the '.show()' method. 
browserholder.show() 
 
## Give that developer a cookie ! 
window.connect("delete-event", Gtk.main_quit) 
window.show_all() 
Gtk.main()

ফাইলটি সংরক্ষণ করুন, এবং এটি চালান।

$ chmod 755 mywebbrowser.py
$ ./mywebbrowser.py

এবং এই কি আপনি পাবেন।

আরও বিকল্পগুলি আবিষ্কার করতে আপনি WebKitGtk অফিসিয়াল ডকুমেন্টেশনের জন্য উল্লেখ করতে পারেন।

এই বিভাগে, আমরা কীভাবে পাইথন ফাইল থেকে স্থানীয় ও মডিউলটি ব্যবহার করে স্থানীয় সিস্টেম কমান্ড বা শেল স্ক্রিপ্টগুলি চালাতে পারি যা আমাদের ডেস্কটপের জন্য একটি সাধারণ স্ক্রিন রেকর্ডার তৈরি করতে সহায়তা করবে ' avconv ' কমান্ড।

গ্ল্যাড ডিজাইনার খুলুন এবং নিম্নলিখিত উইজেটগুলি তৈরি করুন:

  1. ‘উইন্ডোজ 1’ উইজেট তৈরি করুন
  2. ‘বক্স1’ উইজেট তৈরি করুন
  3. ‘বাটন 1’, ‘বাটন 2’ এবং ‘বাটন 3’ উইজেট তৈরি করুন
  4. ‘এন্ট্রি 1’ উইজেট তৈরি করুন

উপরের উইজেটগুলি তৈরি করার পরে, আপনি ইন্টারফেসের নীচে পাবেন।

এখানে সম্পূর্ণ ui.glade ফাইল।

<?xml version="1.0" encoding="UTF-8"?> 
<!-- Generated with glade 3.16.1 --> 
<interface> 
  <requires lib="gtk+" version="3.10"/> 
  <object class="GtkWindow" id="window1"> 
    <property name="can_focus">False</property> 
    <property name="title" translatable="yes">Our Simple Recorder</property> 
    <property name="window_position">center</property> 
    <property name="default_width">300</property> 
    <property name="default_height">30</property> 
    <property name="icon_name">applications-multimedia</property> 
    <child> 
      <object class="GtkBox" id="box1"> 
        <property name="visible">True</property> 
        <property name="can_focus">False</property> 
        <child> 
          <object class="GtkEntry" id="entry1"> 
            <property name="visible">True</property> 
            <property name="can_focus">True</property> 
          </object> 
          <packing> 
            <property name="expand">False</property> 
            <property name="fill">True</property> 
            <property name="position">0</property> 
          </packing> 
        </child> 
        <child> 
          <object class="GtkButton" id="button1"> 
            <property name="label">gtk-media-record</property> 
            <property name="visible">True</property> 
            <property name="can_focus">True</property> 
            <property name="receives_default">True</property> 
            <property name="use_stock">True</property> 
            <property name="always_show_image">True</property> 
            <signal name="clicked" handler="recordbutton" swapped="no"/> 
          </object> 
          <packing> 
            <property name="expand">True</property> 
            <property name="fill">True</property> 
            <property name="position">1</property> 
          </packing> 
        </child> 
        <child> 
          <object class="GtkButton" id="button2"> 
            <property name="label">gtk-media-stop</property> 
            <property name="visible">True</property> 
            <property name="can_focus">True</property> 
            <property name="receives_default">True</property> 
            <property name="use_stock">True</property> 
            <property name="always_show_image">True</property> 
            <signal name="clicked" handler="stopbutton" swapped="no"/> 
          </object> 
          <packing> 
            <property name="expand">True</property> 
            <property name="fill">True</property> 
            <property name="position">2</property> 
          </packing> 
        </child> 
        <child> 
          <object class="GtkButton" id="button3"> 
            <property name="label">gtk-media-play</property> 
            <property name="visible">True</property> 
            <property name="can_focus">True</property> 
            <property name="receives_default">True</property> 
            <property name="use_stock">True</property> 
            <property name="always_show_image">True</property> 
            <signal name="clicked" handler="playbutton" swapped="no"/> 
          </object> 
          <packing> 
            <property name="expand">True</property> 
            <property name="fill">True</property> 
            <property name="position">3</property> 
          </packing> 
        </child> 
      </object> 
    </child> 
  </object> 
</interface>

যথারীতি, উপরের কোডটি অনুলিপি করুন এবং এটি আপনার হোম ডিরেক্টরিতে " ui.glade " ফাইলটিতে পেস্ট করুন, একটি নতুন " মাইরেকার্ডার.পি " ফাইল তৈরি করুন এবং নিম্নলিখিতটি প্রবেশ করুন এর ভিতরে কোড (প্রতিটি নতুন লাইন মন্তব্যে ব্যাখ্যা করা হয়েছে)।

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

## Here we imported both Gtk library and the os module. 
from gi.repository import Gtk 
import os 
        
class Handler: 
  def recordbutton(self, button): 
    ## We defined a variable: 'filepathandname', we assigned the bash local variable '$HOME' to it + "/" + the file name from the text entry box. 
    filepathandname = os.environ["HOME"] + "/" + entry.get_text() 
    
    ## Here exported the 'filepathandname' variable from Python to the 'filename' variable in the shell. 
    os.environ["filename"] = filepathandname 
    
    ## Using 'os.system(COMMAND)' we can execute any shell command or shell script, here we executed the 'avconv' command to record the desktop video & audio. 
    os.system("avconv -f x11grab -r 25 -s `xdpyinfo | grep 'dimensions:'|awk '{print $2}'` -i :0.0 -vcodec libx264 -threads 4 $filename -y & ") 
    
    
  def stopbutton(self, button): 
    ## Run the 'killall avconv' command when the stop button is clicked. 
    os.system("killall avconv") 
    
  def playbutton(self, button): 
  ## Run the 'avplay' command in the shell to play the recorded file when the play button is clicked. 
    os.system("avplay $filename &") 
    
    
## Nothing new here.. We just imported the 'ui.glade' file. 
builder = Gtk.Builder() 
builder.add_from_file("ui.glade") 
builder.connect_signals(Handler()) 

window = builder.get_object("window1") 
entry = builder.get_object("entry1") 
entry.set_text("myrecording-file.avi") 

## Give that developer a cookie ! 
window.connect("delete-event", Gtk.main_quit) 
window.show_all() 
Gtk.main()

এখন টার্মিনালে নিম্নলিখিত কমান্ড প্রয়োগ করে ফাইলটি চালান।

$ chmod 755 myrecorder.py
$ ./myrecorder.py

এবং আপনি আপনার প্রথম ডেস্কটপ রেকর্ডার পেয়েছেন।

পাইথন ওএস লাইব্রেরিতে আপনি <<< ও মডিউল সম্পর্কে আরও তথ্য পেতে পারেন।

এবং এটিই, লিনাক্স ডেস্কটপের জন্য অ্যাপ্লিকেশন তৈরি করা পাইগোবজেক্ট ব্যবহার করে শক্ত নয়, আপনাকে কেবল জিইউআই তৈরি করতে হবে, কিছু মডিউল আমদানি করতে হবে এবং পাইথন ফাইলটিকে জিইউআইয়ের সাথে সংযুক্ত করতে হবে, এর চেয়ে বেশি কিছু নয়, কিছু কম নয়। পিআইজিওবজেক্ট ওয়েবসাইটে এটি করার বিষয়ে অনেক দরকারী টিউটোরিয়াল রয়েছে:

আপনি কি পিজিওজেক্ট ব্যবহার করে অ্যাপ্লিকেশন তৈরি করার চেষ্টা করেছেন? এমনটি করার বিষয়ে আপনার কী ধারণা? আপনি কি অ্যাপ্লিকেশন আগে বিকাশ করেছেন?