如何获取模块的另一个文件的路径?
我以这种方式尝试过,但是我不知道从何处获得from PyQt4 import QtCore, QtGui
def create_model(parent):
model = QtGui.QStandardItemModel(parent)
for i in range(3):
parent_item = QtGui.QStandardItem("Family {}".format(i))
for j in range(3):
child1 = QtGui.QStandardItem("Child {}".format(i * 3 + j))
child2 = QtGui.QStandardItem("row: {}, col: {}".format(i, j + 1))
child3 = QtGui.QStandardItem("row: {}, col: {}".format(i, j + 2))
parent_item.appendRow([child1, child2, child3])
model.appendRow(parent_item)
return model
class Widget(QtGui.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self._tree_view = QtGui.QTreeView()
self._tree_view.setModel(create_model(self))
self._tree_view.expandAll()
lay = QtGui.QVBoxLayout(self)
lay.addWidget(self._tree_view)
self._tree_view.doubleClicked.connect(self.on_doubleClicked)
@QtCore.pyqtSlot("QModelIndex")
def on_doubleClicked(self, ix):
print(ix.data())
gp = QtGui.QCursor.pos()
lp = self._tree_view.viewport().mapFromGlobal(gp)
ix_ = self._tree_view.indexAt(lp)
if ix_.isValid():
print(ix_.data())
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
,而且我不知道如果我拥有from PySide import QtCore, QtGui
def create_model(parent):
model = QtGui.QStandardItemModel(parent)
for i in range(3):
parent_item = QtGui.QStandardItem("Family {}".format(i))
for j in range(3):
child1 = QtGui.QStandardItem("Child {}".format(i * 3 + j))
child2 = QtGui.QStandardItem("row: {}, col: {}".format(i, j + 1))
child3 = QtGui.QStandardItem("row: {}, col: {}".format(i, j + 2))
parent_item.appendRow([child1, child2, child3])
model.appendRow(parent_item)
return model
class Widget(QtGui.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self._tree_view = QtGui.QTreeView()
self._tree_view.setModel(create_model(self))
self._tree_view.expandAll()
lay = QtGui.QVBoxLayout(self)
lay.addWidget(self._tree_view)
self._tree_view.doubleClicked.connect(self.on_doubleClicked)
@QtCore.Slot("QModelIndex")
def on_doubleClicked(self, ix):
print(ix.data())
gp = QtGui.QCursor.pos()
lp = self._tree_view.viewport().mapFromGlobal(gp)
ix_ = self._tree_view.indexAt(lp)
if ix_.isValid():
print(ix_.data())
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
可以行得通吗?
$here
尝试此操作时,$here
为空:
use v6;
unit class Aaa::Bbb::Ccc;
my $here = '.../lib/Aaa/Bbb/Ccc.pm6'.IO;
my $bin = $here.parent.parent.parent.add( 'bin' ).add( 'app' );
use Pod::Load;
my $pod = load( $bin );
# use the $pod
答案 0 :(得分:8)
没有“模块的另一个文件”之类的东西。一个模块将只代表一个文件。分布表示多个模块,因此代表多个文件。此外,模块不能假定它是从文件系统中加载的-它可能是从tar file或socket加载到内存中的,并且如果某个模块尝试访问例如"../MyOtherModule.pm6".IO
显然会失败。
可以安全地做的是获得同一发行版中任何模块的内容:
unit class Aaa::Bbb::Ccc;
my $bin-code = $?DISTRIBUTION.content("bin/app").open.slurp;
答案 1 :(得分:1)
更新: 正如@ugexe指出的那样,如果您打算安装模块,将无法正常工作。
$?DISTRIBUTION似乎是一个很好的解决方案。
否则,一种替代方法是使用$?FILE变量。如果要在程序的其他位置使用它,则需要从模块中导出它:
unit module MyModule;
our sub myDIR() {
$?FILE.IO.dirname;
}
use MyModule;
myDIR()~"/relative/path/to/somefile