Найти - Пользователи
Полная версия: [PyQt4] Открытие файла программой, заданной в системе.
Начало » GUI » [PyQt4] Открытие файла программой, заданной в системе.
1
darktroll
Здравствуйте.
Я не знаю как правильнее назвать тему, получилось может не совсем говоряще, но суть вопроса в следующем.
Использую QlistView + QfileSystemModel. Нужно реализовать открытие файла, выделенного в QListView соответствующей программой.
Дело в том, что я не совсем представляю как это можно сделать. Хотелось бы, чтобы программа работала на Windows и Linux. У меня есть надежда, что это все можно реализовать базовыми функциями Qt и Python через mime-типы, но я не могу найти нужных функций.
Я не знаю устройства ассоциации приложений определнным типам файлов, но думаю что в каждой системе есть что-то наподобие списка соответсвий. Например: *.avi : MPlayer, *.mp3 : audacious.
В общем, вопрос такой: как проще открыть файл, выделенный в QListView, с помощью системных ассоцивций типов файлов?
poltergeist
Универсального метода не существует (разве что кто-то написал свою обёртку для этого), для винды есть это: http://docs.python.org/library/os.html#os.startfile
Для KDE, Gnome должен быть свой метод.
darktroll
Да, с виндой сработало, спасибо большое. А я для Linux значит придется искать другой способ….. Обидно, что нет универсального…..
Андрей Светлов
Запустить gnome-open
Что делать с KDE - не знаю
darktroll
Для гнома нашел решение:
os.system(“gnome-open ” + path)

Но это не универсально. Хотелось бы чего для линукса в общем. Ибо планирую эту прогу потом юзать и на Maemo 4 (Nokia N810), но вот gnome-open там нету…. Хотя бы для Debian-based систем что общее придумать бы….
ZZZ
Для линукса такого решения нет и не может быть. :-)
Вообще, было бы неплохо иметь библиотеку, объединяющую несколько вариантов под одним API.
dartNNN
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
Такое решение видел, на ББ оно работает, а на Maemo - нет.
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