darktroll
Май 22, 2010 18:39:12
Здравствуйте.
Я не знаю как правильнее назвать тему, получилось может не совсем говоряще, но суть вопроса в следующем.
Использую QlistView + QfileSystemModel. Нужно реализовать открытие файла, выделенного в QListView соответствующей программой.
Дело в том, что я не совсем представляю как это можно сделать. Хотелось бы, чтобы программа работала на Windows и Linux. У меня есть надежда, что это все можно реализовать базовыми функциями Qt и Python через mime-типы, но я не могу найти нужных функций.
Я не знаю устройства ассоциации приложений определнным типам файлов, но думаю что в каждой системе есть что-то наподобие списка соответсвий. Например: *.avi : MPlayer, *.mp3 : audacious.
В общем, вопрос такой: как проще открыть файл, выделенный в QListView, с помощью системных ассоцивций типов файлов?
poltergeist
Май 22, 2010 21:20:16
Универсального метода не существует (разве что кто-то написал свою обёртку для этого), для винды есть это:
http://docs.python.org/library/os.html#os.startfileДля KDE, Gnome должен быть свой метод.
darktroll
Май 22, 2010 22:12:21
Да, с виндой сработало, спасибо большое. А я для Linux значит придется искать другой способ….. Обидно, что нет универсального…..
Андрей Светлов
Май 22, 2010 23:12:01
Запустить gnome-open
Что делать с KDE - не знаю
darktroll
Май 22, 2010 23:18:43
Для гнома нашел решение:
os.system(“gnome-open ” + path)
Но это не универсально. Хотелось бы чего для линукса в общем. Ибо планирую эту прогу потом юзать и на Maemo 4 (Nokia N810), но вот gnome-open там нету…. Хотя бы для Debian-based систем что общее придумать бы….
ZZZ
Май 23, 2010 01:51:56
Для линукса такого решения нет и не может быть. :-)
Вообще, было бы неплохо иметь библиотеку, объединяющую несколько вариантов под одним API.
dartNNN
Май 23, 2010 16:47:48
The os module does not provide a cross-platform way to start a file with the associated application. Luckily there is any easy way to do it. An example from phatch/lib/system.py:
def start(path):
if hasattr(os, ‘startfile’): # Windows
os.startfile(path)
else:
if sys.platform.startswith('darwin'): # Mac OS X
command = ‘open’
else: # Linux
command = ‘xdg-open’
subprocess.call()
Вот отсюда
http://us.pycon.org/media/2010/talkdata/PyCon2010/038/paper.htmlНе проверял, просто наткнулся решил показать
darktroll
Май 23, 2010 23:42:00
Такое решение видел, на ББ оно работает, а на Maemo - нет.