2016-08-21 4 views
0

Я хотел бы получить полный путь к моей директории, что-то вроде:PyQT QFileDialog - получить полный каталог включая IP диска

//192.168.1.23/D/test/test/aaaa/ 

или

//192.168.1.23/D:/test/test/aaaa/ 

Как я могу получить QFileDialog дать мне IP-адрес жесткого диска, который я выбрал?

В настоящее время с помощью

self.project= str(QtGui.QFileDialog.getExistingDirectory(self, "Select Directory", lastDir)) 

пытался идти через os.path.dirname(self.project) но только когда-либо спускается D:\

Спасибо!

ответ

0

Не знаю, где я его нашел, но вот вариант, которым я следовал в конце. Я разрешаю пользователю решить, какое устройство следует использовать для определения местоположения

from netifaces import interfaces, ifaddresses, AF_INET 
p =[] 
for ifaceName in interfaces(): 
    addresses = [i['addr'] for i in ifaddresses(ifaceName).setdefault(AF_INET, [{'addr':'No IP addr'}])] 
    p.append(ifaceName.join(addresses)) 

print p[0],p[1] 
print p 
1

То, что вы хотите сделать, невозможно в PyQt напрямую с помощью QFileDialog. Вместо этого вы можете получить IP-адрес своей машины с помощью другого метода, а затем объединить это с файловым путем, что-то вроде этого. QFileDialog не «Сеть известно»

import socket 
def get_ip_addr(): 
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    s.connect(("8.8.8.8", 80)) 
    return s.getsockname()[0] 

ip = get_ip_addr() 

path = self.project= str(QtGui.QFileDialog.getExistingDirectory(self, "Select Directory", lastDir)) 

file_path = '//{}/{}'.format(ip, path) # or what ever formatting suits you 

Вы также можете посмотреть на QNetworkInterface http://pyqt.sourceforge.net/Docs/PyQt4/qnetworkinterface.html#interfaceFromName, если вы заинтересованы в других адресов на вашем компьютере, но приведенный выше пример просто возвращает адрес IP-, который используется для маршрутизации в 8.8.8.8

+0

Это правильная идея для решения, но вы можете получить его, фактически не подключаясь к любой удаленной конечной точке. Вместо этого я бы использовал нечто вроде 'socket.gethostbyname (socket.gethostname())'. – bnaecker

+0

, который может возвращать '127.0.0.1' на машине, у которой есть имя хоста, установленное на' 127.0.0.1' в машинах '/etc/hosts'...Linux, но op, похоже, использует окна, поэтому он может работать на окнах но я не уверен – danidee

+0

Эй, я подумал об этом. Но если я попытаюсь перечислить сетевой диск, который позволяет сказать //192.168.1.50/E, и я запускаю gethostname() opt или имя сокета, результат будет //192.168.1.23/E ... направляет меня в неправильное место? Не только это, если у меня есть 2 сетевых карты. Я думаю, мне может понадобиться 2 IP-адреса для данного драйвера. Честно говоря, я еще не проверил его, но я отдам его, может быть, я здесь не прав ... Спасибо! – Dariusz

Смежные вопросы