記事ディレクトリ
ファイルのドラッグ アンド ドロップ機能を実装する
想像してみてください、Python プロジェクト フォルダーまたはスクリプトを IDE で開きたいと考えた場合、IDE でフォルダー パスを選択するか、スクリプトを開く方法を選択するかにかかわらず、クリックして選択する必要があります。または、コマンド ラインで Python スクリプトを実行する必要があり、ファイル パス パラメーターを渡す必要がありますが、パスを手で入力するのは非常に面倒です。上記の状況をファイルのドラッグ アンド ドロップで置き換えることができれば、間違いなく便利で簡単になります。
PS: 以下で紹介する方法は、Windows でのみ正常にテストされています。
1 ファイルを QT ウィンドウにドラッグ アンド ドロップします。
ファイルをフォームにドラッグ&ドロップしてQTウィンドウ上で操作する機能を追加する例を示します。シンプルな 3D モデル ファイル視覚化ソフトウェアを作成しましたが、このソフトウェアには「ファイルを開く」オプションがありますが、場合によっては依然として非常に面倒です。視覚的に描画するために、モデル ファイルをソフトウェアのウィンドウに直接ドラッグできるようにしたいと考えています。
1.1 実装方法
この記事を参照してください: Qt メイン ウィンドウはファイルのドラッグとテキスト ボックスへの表示を実装します
ウィンドウ初期化関数に行を追加
self.setAcceptDrops(True) # 设置接受拖拽
次に、オーバーライドdragEnterEvent
とdropEvent
2 つのメソッド
def dragEnterEvent(self, a0: QtGui.QDragEnterEvent) -> None: # 拖动进入事件
if a0.mimeData().hasUrls():
a0.acceptProposedAction()
else:
a0.ignore()
def dropEvent(self, a0: QtGui.QDropEvent) -> None: # 放下事件
mimeData = a0.mimeData()
if mimeData.hasUrls():
urlList = mimeData.urls()
filename = urlList[0].toLocalFile() # 得到了文件的路径
if filename: # 下面便是对文件的相关操作
# 绘制图形
_, suffix = os.path.splitext(filename)
self.SceneManager.ClearAll()
if suffix == '*.xyz': # 点云绘制
self.original_model = read_xyz(filename)
self.SceneManager.drawPdSrc(self.original_model, (241 / 255, 135 / 255, 184 / 255), point_size = 3)
else:
self.original_model = ReadPolyData(filename).GetOutput()
self.SceneManager.drawPdSrc(self.original_model)
self.SceneManager.display()
1.2 効果実証
2 ファイルをPythonスクリプトにドラッグ&ドロップします。
Windows システムでは、Python スクリプト ファイルは .py ファイルであり、このファイルへの他のファイルのドラッグ アンド ドロップはサポートされていないことが知られています。他のファイルを入力パラメータとしてスクリプト ファイルにドラッグ アンド ドロップし、スクリプトを実行することを実装したいと考えています。
2.1 実装方法
新しいpyfile_droppable.reg
ファイルを作成し、次の内容を入力して保存します。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Python.File\shellex\DropHandler]
@="{60254CA5-953B-11CF-8C96-00AA00B8708C}"
[HKEY_CLASSES_ROOT\Python.File\Shell\open\command]
@=""<python interpreter path>" "%L" %*"
このファイルをダブルクリックして実行すると、レジストリ関連情報の追加が完了します。関連原則の参照: Windows で Python スクリプトをドロップ可能にする。
上記の reg ファイルは、レジストリに 2 つの項目を追加します。3 行目と 4 行目の機能は、Python スクリプト ファイルがドラッグ アンド ドロップされたファイルを受信できるようにすることです (ファイルのパスを取得します)。6 行目と 7 行目の機能は次のとおりです。 Python スクリプトを実行するためのインタープリターへのパスを指定します。レジストリを開いてみると、主に下の図の2箇所を変更していることが分かりました。
droppable_test.py
次に、次の内容を含む新しいテスト スクリプトを作成します。
import os
import sys
py_dir = os.path.dirname(__file__) # 当前脚本所在的目录
result_path = os.path.join(py_dir, 'result.txt') # 生成的结果文件放在脚本目录下
args = sys.argv
# 合并内容并生成新文件
with open(args[1], 'rb') as f:
data1 = f.read()
with open(args[2], 'rb') as f:
data2 = f.read()
with open(result_path, 'wb') as f:
f.write(data1 + data2)
print("文件合并成功!结果文件保存至:" + result_path)
input("按任意键关闭窗口...")
2.2 効果実証
複数のファイルがパラメータとして py スクリプトに渡される順序は、複数のファイルが選択された順序、つまり上から下、左から右の順であることに注意してください。