পাইথন, জিআইআর এবং জিটিকে 3 দিয়ে সূচকগুলি লেখা


18

আমি একটি অ্যাপ্লিকেশন লিখছি যা একটি সূচক ব্যবহার করা প্রয়োজন। আমি অতীতে পাইগিটিকে এবং জিটিকে ২ ব্যবহার করে এই দস্তাবেজটিকে রেফারেন্স হিসাবে ব্যবহার করেছি: https://wiki.ubuntu.com/DesktopExperienceTamam / ApplicationIndicators#Python_version

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

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

ধন্যবাদ।

উত্তর:


19

এটি gtk3 এবং appindicator এর জন্য আমার পরীক্ষার কোড যা GPaste এর জন্য একটি সূচক তৈরি করে ।

মূলত,

from gi.repository import AppIndicator3 as AppIndicator

প্যাকেজ দ্বারা সরবরাহ করা হয় যা gtk3 অ্যাপ্লিকেশন জন্য appindicator ব্যবহার করার জন্য gir1.2-appindicator3

এখানে AppIndicator3 ডকুমেন্টেশন রয়েছে।

পাইগটিকে জিটিকে ৩ এর জন্য অবমূল্যায়ন করা হবে এবং পাইথনে জিটিকি 3 অ্যাপ্লিকেশন বিকাশের জন্য আপনাকে জিওজেক্ট - ইনট্রোস্পেকশন রুট দিয়ে যেতে হবে । আপনি পাইগোবজেক্ট ডকুমেন্টেশনটি উল্লেখ করতে পারেন । পরিবর্তে

import pygtk, gtk, gdk, gobject, pango  

ইত্যাদি আপনার করা উচিত

from gi.repository import Gtk, Gdk, Pango, GObject  

একটি কার্যকরী কোড অধ্যয়নের জন্য, আপনি কাজামটি দেখতে পাবেন যা gtk2 থেকে gtk3 এ চলে গেছে এবং অ্যাপিন্ডিকেটর 3 ব্যবহার করে

এখানে একটি প্যাকেজ gir1.2-appindicatorরয়েছে যা ব্যবহারের python-appindicatorমতো বলে মনে হচ্ছে তারা উভয়ই জিটিকে 2 অ্যাপ্লিকেশনটির জন্য ব্যবহার সরবরাহ করে যা:

from gi.repository import AppIndicator

অথবা

import appindicator

পাশাপাশি এই ব্লগ পোস্টে কিছু তথ্য ।


আমি AppIndicator3 সাথে গিয়েছিলাম। তবে এর অর্থ কি এই যে অ্যাপ্লিকেশন 1 টি পাইথন-অ্যাপিন্ডিকেটরটির সরাসরি বন্দর যেখানে এআই 3 একটি নতুন সংস্করণ যা ব্যাকপোর্ট করা হয়নি?
জো-এরলেন্ড শিনস্টাড

এটা মনে হয়। আমি পাইথন শেল থেকে অ্যাপিনডিকেটর ০.০ লোড করেছি এবং তারপরে অ্যাপিনডিকেটর 3 লোড করার চেষ্টা করেছি যা আমাকে এই ত্রুটি দিয়েছে RepositoryError: Requiring namespace 'Gtk' version '3.0', but '2.0' is already loaded। সুতরাং এটি অ্যাপিন্ডিকেটর ০.০ gtk2 অর্থাৎ পিগটিক এবং অ্যাপিনডিকেটর 3 এর সাথে কাজ করে এবং উপরের কোনওটি যদি জিটিকে 3 নিয়ে কাজ করে
সাগরচালাইস

আহ, আমি পেয়েছি এটি এআই এর 3 সংস্করণ নয়। এটি জিটিকে 3 এর জন্য এআই :)
জো-এরলেন্ড শিনস্টাড

আমি AppIndicator3 এর ব্যবহার নিয়ে আলোচনা করা এই ব্লগ এন্ট্রিটিও লক্ষ্য করেছি , যা আপনাকে আকর্ষণীয় মনে হতে পারে।
ডেভিড প্লানেলা

2
কেবল একটি নোট, এই লিঙ্কগুলির বেশিরভাগটি মারা গেছে।
রোবটহুমানস

10

এখানে একটি নির্বোধ সরল স্ক্যাফোোল্ড অ্যাপ্লিকেশন যা একটি কনফিগার উইন্ডো, একটি প্রধান উইন্ডো এবং একটি অ্যাপ্লিকেশন সূচক রয়েছে।

#!/usr/bin/env python3.3

from gi.repository import Gtk
from gi.repository import AppIndicator3 as appindicator

class MyIndicator:
  def __init__(self, root):
    self.app = root
    self.ind = appindicator.Indicator.new(
                self.app.name,
                "indicator-messages",
                appindicator.IndicatorCategory.APPLICATION_STATUS)
    self.ind.set_status (appindicator.IndicatorStatus.ACTIVE)
    self.menu = Gtk.Menu()
    item = Gtk.MenuItem()
    item.set_label("Main Window")
    item.connect("activate", self.app.main_win.cb_show, '')
    self.menu.append(item)

    item = Gtk.MenuItem()
    item.set_label("Configuration")
    item.connect("activate", self.app.conf_win.cb_show, '')
    self.menu.append(item)

    item = Gtk.MenuItem()
    item.set_label("Exit")
    item.connect("activate", self.cb_exit, '')
    self.menu.append(item)

    self.menu.show_all()
    self.ind.set_menu(self.menu)

  def cb_exit(self, w, data):
     Gtk.main_quit()

class MyConfigWin(Gtk.Window):
  def __init__(self, root):
    super().__init__()
    self.app = root
    self.set_title(self.app.name + ' Config Window')

  def cb_show(self, w, data):
    self.show()

class MyMainWin(Gtk.Window):
  def __init__(self, root):
    super().__init__()
    self.app = root
    self.set_title(self.app.name)

  def cb_show(self, w, data):
    self.show()

class MyApp(Gtk.Application):
  def __init__(self, app_name):
    super().__init__()
    self.name = app_name
    self.main_win = MyMainWin(self)
    self.conf_win = MyConfigWin(self)
    self.indicator = MyIndicator(self)

  def run(self):
    Gtk.main()

if __name__ == '__main__':
  app = MyApp('Scaffold')
  app.run()

9

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

এখানে দেখুন: https://bitbucket.org/cpbotha/indicator-cpuspeed/src


8

সিপিইউ তাপমাত্রা পড়ার উদাহরণ এখানে। স্ক্রিপ্ট ডিরেক্টরিতে টেম্প-আইকন.পিএনজি / এসভিজি নামের একটি আইকন অনুলিপি করুন

from gi.repository import Gtk, GLib
from gi.repository import AppIndicator3 as appindicator
import os

def cb_exit(w, data):
   Gtk.main_quit()

def cb_readcputemp(ind_app):
# get CPU temp
   fileh = open(
      '/sys/devices/platform/thinkpad_hwmon/subsystem/devices/coretemp.0/temp1_input',
    'r')
  ind_app.set_label(fileh.read(2), '')
  fileh.close()
  return 1


ind_app = appindicator.Indicator.new_with_path (
  "cputemp-indicator",
   "temp-icon",
   appindicator.IndicatorCategory.APPLICATION_STATUS,
    os.path.dirname(os.path.realpath(__file__)))
ind_app.set_status (appindicator.IndicatorStatus.ACTIVE)

# create a menu
menu = Gtk.Menu()
menu_items = Gtk.MenuItem("Exit")
menu.append(menu_items)
menu_items.connect("activate", cb_exit, '')
menu_items.show()
ind_app.set_menu(menu)
GLib.timeout_add(500, cb_readcputemp, ind_app)
Gtk.main()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.