मैं पायथन स्क्रिप्ट का उपयोग करके वॉलपेपर कैसे बदल सकता हूं?


11

मैं अपने वॉलपेपर को उबंटू 11.10 (एकता के साथ) में एक छोटे पायथन लिपि में बदलना चाहता हूं। मैं संभावना के माध्यम से इसे बदलने के लिए मिल गया gconf-editorमें /desktop/gnome/background/picture_filename। के साथ python-gconf, मैं आवश्यक मूल्यों को बदलने में सक्षम हूं।

जाहिरा तौर पर, gconf स्ट्रिंग को पढ़ा नहीं जाता है। यदि मैं इसे बदल देता हूं (या तो स्क्रिप्ट या माध्यम से gconf-editor), तो वॉलपेपर बना रहता है और "बदलें वॉलपेपर" के मेनू में, पुराना वॉलपेपर दिखाया गया है।

मैं पायथन स्क्रिप्ट के माध्यम से एकता के लिए वॉलपेपर कैसे बदल सकता हूं?

निम्नलिखित कोड काम करता है।

#!/usr/bin/python
# -*- coding: utf-8 -*-
from gi.repository import Gio

class BackgroundChanger():
        SCHEMA = 'org.gnome.desktop.background'
        KEY = 'picture-uri'

        def change_background(self, filename):
                gsettings = Gio.Settings.new(self.SCHEMA)
                print(gsettings.get_string(self.KEY))
                print(gsettings.set_string(self.KEY, "file://" + filename))
                gsettings.apply()
                print(gsettings.get_string(self.KEY))

if __name__ == "__main__":
        BackgroundChanger().change_background("/home/user/existing.jpg")

जवाबों:


11

दुर्भाग्य से, gconf वास्तव में खुद को बहुत अच्छी तरह से साफ नहीं करता है। वह और पुरानी सेटिंग है। 11.10 में GNOME3 और यूनिटी के साथ, डेस्कटॉप पृष्ठभूमि सेटिंग अब dconf में संग्रहीत है। dconf-editorआप के साथ सेटिंग पा सकते हैंorg.gnome.desktop.background.picture-uri

यहां एक त्वरित उदाहरण दिखाया गया है कि पृष्ठभूमि को अजगर, GTK और Gobject Introspection के साथ कैसे बदलना है:

#! /usr/bin/python

from gi.repository import Gtk, Gio

class BackgroundChanger(Gtk.Window):

    SCHEMA = 'org.gnome.desktop.background'
    KEY = 'picture-uri'

    def __init__(self):
        Gtk.Window.__init__(self, title="Background Changer")

        box = Gtk.Box(spacing=6)
        self.add(box)

        button1 = Gtk.Button("Set Background Image")
        button1.connect("clicked", self.on_file_clicked)
        box.add(button1)

    def on_file_clicked(self, widget):
        gsettings = Gio.Settings.new(self.SCHEMA)

        dialog = Gtk.FileChooserDialog("Please choose a file", self,
            Gtk.FileChooserAction.OPEN,
            (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
             Gtk.STOCK_OPEN, Gtk.ResponseType.OK))

        self.add_filters(dialog)

        response = dialog.run()
        if response == Gtk.ResponseType.OK:
            background = dialog.get_filename()
            gsettings.set_string(self.KEY, "file://" + background)
        elif response == Gtk.ResponseType.CANCEL:
            pass

        dialog.destroy()

    def add_filters(self, dialog):
        filter_image = Gtk.FileFilter()
        filter_image.set_name("Image files")
        filter_image.add_mime_type("image/*")
        dialog.add_filter(filter_image)

        filter_any = Gtk.FileFilter()
        filter_any.set_name("Any files")
        filter_any.add_pattern("*")
        dialog.add_filter(filter_any)

win = BackgroundChanger()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()

यहाँ GSettings और Python पर दो उपयोगी ब्लॉग पोस्ट हैं:

http://www.micahcarrick.com/gsettings-python-gnome-3.html

http://www.lucidelectricdreams.com/2011/06/reading-and-writing-gsettings-from.html


संकेत के लिए धन्यवाद। यह सही लगता है, लेकिन दुर्भाग्य से, सेटिंग्स अपडेट नहीं की जाती हैं। यदि मैं नया URI सेट करता हूं, तो फ़ंक्शन सफलता के लिए सही है, लेकिन dconf-editor या get-string कॉल में, पुराना मान वापस मिल जाता है। इसलिए, वॉलपेपर अपडेट नहीं किया गया है। क्या मैं यह गलत कर रहा हूँ?
गुरदा

हम्म् ... उपरोक्त कोड निश्चित रूप से वॉलपेपर को अपडेट करता है। हो सकता है कि अगर आपने अपना कुछ कोड किसी पास्टबिन पर पोस्ट किया हो तो मुझे बेहतर अंदाजा होगा कि आपके मामले में क्या हो रहा है।
andrewsomething

हाय andrewsomething! मेरे पास वापस आने के लिए धन्यवाद! मैंने अपने कोड उदाहरण के साथ अपना प्रश्न अपडेट किया। अगर आप मेरी मदद कर सकें तो बहुत अच्छा होगा।
गुरदा

आपका कोड मेरे लिए काम करता है ... आपकी मदद के लिए धन्यवाद! मैं एक न्यूनतम काम करने का उदाहरण भी पोस्ट करूंगा।
ग्वार

8

हेयर यू गो

#! /usr/bin/python

import os

os.system("gsettings set org.gnome.desktop.background picture-uri file:///home/user/Pictures/wallpaper/Stairslwallpaper.png")

2

शायद सबसे अच्छा नहीं बल्कि सबसे आसान उपाय:

import commands
command = 'gsettings set org.gnome.desktop.background picture-uri "file:///home/user/test.png"'
status, output = commands.getstatusoutput(command)

2
यह केवल टर्मिनल कमांड है। हो सकता है कि आपको इस सवाल का पूरी तरह से जवाब देने के लिए अजगर के माध्यम से इसे कैसे शामिल करना चाहिए?
एनएन

नहीं, यह एक अजगर लिपि है जो ठीक उसी तरह काम करती है।
dirkk0

1
बस देखा कि that कमांड ’पदावनत है। w = "/usr/share/backgrounds/warty-final-ubuntu.png"; c = 'gsettings set org.gnome.desktop.background picture-uri "file://%s"' % w; import subprocess; subprocess.call(c.split())
dirkk0
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.