2016-08-21 125 views
0

的IP我想获得我的目录的完整路径,像:PyQt的QFileDialog - 获得完整的目录包括磁盘

//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

可能会在'/etc/hosts'...Linux机器上显示主机名为'127.0.0.1'的计算机上返回'127.0.0.1',但似乎是op使用Windows,所以它可能在Windows但我不确定 – danidee

+0

嘿,我确实想到了。但如果我尝试列出可以说//192.168.1.50/E的网络驱动器,并且运行gethostname()opt或socketname,那么结果将是//192.168.1.23/E ...将我指向错误的位置?不仅如果我有2个网卡。我想我可能需要2个IP地址给定驱动程序。老实说,我还没有检查过,但我会给它一个去也许我错了...谢谢! – Dariusz