Найти - Пользователи
Полная версия: Проблема с импортированием GObject
Начало » Python для новичков » Проблема с импортированием GObject
1
Nightwing
Собственно, есть такой вот код:
import sys, os
import pygst
import gst
from gi.repository import Gio,GObject
class DealWithGsettings:
	
	def __init__(self):
		self.TolkCLC_Schema = "apps.talkinclock"
			
	def getAudioFilePath(self):
		schema = Gio.Settings.new(self.TolkCLC_Schema)
		return schema.get_string('audiofile')
	
	def getVolume(self):
		schema = Gio.Settings.new(self.TolkCLC_Schema)
		return schema.get_int('volume')
playloop = gobject.MainLoop()
player = gst.element_factory_make("playbin2")
gsettings = DealWithGsettings()
def on_eos(bus, msg):
	player.set_state(gst.STATE_NULL)
	playloop.quit()	
def play():
	player.set_property('volume', (gsettings.getVolume() / 100))
	player.set_property("uri", "file://" + gsettings.getAudioFilePath())
	print "Playing: " + gsettings.getAudioFilePath()
	player.set_state(gst.STATE_PLAYING)
	bus = player.get_bus()
	bus.add_signal_watch()
	bus.connect('message::eos', on_eos)
	playloop.run()
	print "That's all, folks!"
play()

Результат выполнения:
Traceback (most recent call last):
  File "./talkinclockd.py", line 5, in <module>
    from gi.repository import Gio,GObject
  File "/usr/lib/python2.7/dist-packages/gi/__init__.py", line 23, in <module>
    from ._gi import _API, Repository
ImportError: could not import gobject (error was: ImportError('When using gi.repository you must not import static modules like "gobject". Please change all occurrences of "import gobject" to "from gi.repository import GObject".',))
Я уж, и так, и сяк его ипортировал, даже целиком gi.repository пытался импортировать, и не помогает.
Хотя вот такой код отрабатывает как надо:
 from gi.repository import Gio,GObject
class DealWithGsettings:
	def __init__(self):
		self.TolkCLC_Schema = "apps.talkinclock"
		
	def getAudioFilePath(self):
		schema = Gio.Settings.new(self.TolkCLC_Schema)
		return schema.get_string('audiofile')
		
	def getVolume(self):
		schema = Gio.Settings.new(self.TolkCLC_Schema)
		return schema.get_int('volume')
d = DealWithGsettings()
print d.getAudioFilePath()
print d.getVolume()
sergeek
Хотя вот такой код отрабатывает как надо:
с пробелом перед from чтоли?
в первом примере точно нет import GObject? У вас какой-то модуль загружается с таким же именем
Не знаю как в точности работает система модулей, но глядя на исходники если перед
from gi.repository import Gio,GObject
вставить
del sys.modules['gobject']
этой ошибки быть не должно
но лучше конечно разберитесь что там за модуль и почему он подключается
sergeek
еще
from gi.repository import Gio,GObject
у вас на 4 строке, а в ошибке пишет что на 5.
Nightwing
sergeek
Хотя вот такой код отрабатывает как надо:
с пробелом перед from чтоли?
в первом примере точно нет import GObject? У вас какой-то модуль загружается с таким же именем
Не знаю как в точности работает система модулей, но глядя на исходники если перед
from gi.repository import Gio,GObject
вставить
del sys.modules['gobject']
этой ошибки быть не должно
но лучше конечно разберитесь что там за модуль и почему он подключается
Уже разобрался. Gstreamer тоже надо тоже через gir подключать. Видимо, import pygst подгружал pygobject, а Gio из gir'а подгружал свой gobject, опять же, из gir'а. Вот и получался конфликт…
Самое неприятное, что у gir'овских биндингов немножко так другое api.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB