Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 6, 2012 17:39:24

Nightwing
Зарегистрирован: 2012-08-06
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с импортированием GObject

Собственно, есть такой вот код:

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()

Офлайн

#2 Авг. 6, 2012 18:35:57

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Проблема с импортированием GObject

Хотя вот такой код отрабатывает как надо:
с пробелом перед from чтоли?
в первом примере точно нет import GObject? У вас какой-то модуль загружается с таким же именем
Не знаю как в точности работает система модулей, но глядя на исходники если перед
from gi.repository import Gio,GObject
вставить
del sys.modules['gobject']
этой ошибки быть не должно
но лучше конечно разберитесь что там за модуль и почему он подключается

Отредактировано sergeek (Авг. 6, 2012 18:53:09)

Офлайн

#3 Авг. 6, 2012 18:39:18

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Проблема с импортированием GObject

еще

from gi.repository import Gio,GObject
у вас на 4 строке, а в ошибке пишет что на 5.

Офлайн

#4 Авг. 6, 2012 20:00:52

Nightwing
Зарегистрирован: 2012-08-06
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с импортированием GObject

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.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version