pyqt5で記述されたプロジェクトであるUbuntu18.04で、ファイル選択ボックスを開く機能を実現したいと思います。pyqt5の実現にはQFileDialogが使用され、コードは次のとおりです。
# 这段代码在网上很多,也不知道哪个是原版了。。。
def msg(self):
directory1 = QFileDialog.getExistingDirectory(self,
"选取文件夹",
"./") #起始路径
print(directory1)
fileName1, filetype = QFileDialog.getOpenFileName(self,
"选取文件",
"./",
"All Files (*);;Text Files (*.txt)") #设置文件扩展名过滤,注意用双分号间隔
print(fileName1,filetype)
files, ok1 = QFileDialog.getOpenFileNames(self,
"多文件选择",
"./",
"All Files (*);;Text Files (*.txt)")
print(files,ok1)
fileName2, ok2 = QFileDialog.getSaveFileName(self,
"文件保存",
"./",
"All Files (*);;Text Files (*.txt)")
しかし、実際の操作では、ファイルボックスはホームディレクトリでしか開くことができず、指定したディレクトリに直接アクセスできないことがわかりました。返されるファイル名はファイルのフルパスではなく、「run / ...」です。 。/ファイル名"。
Pyqt5の組み込み実装は実現できないので、Pythonにフォールバックして実装しましょう。Pythonはtkinterによってこの関数を実装し、最初にパッケージをインストールします。
sudo apt-get install python-tk
# 如果是Python3
sudo apt-get install python3-tk
実装コード:
from tkinter import *
import tkinter.filedialog
# 前两行是为了解决运行时,tk会弹出小窗口这一问题
root = tkinter.Tk()
root.withdraw()
# 其中,title为文件选择框的标题,filetypes为需要显示的文件类型,initialdir为默认文件路径
filename = tkinter.filedialog.askopenfilename(title='选择.nov文件', filetypes=[('Nov', '.nov')],
initialdir=(os.path.expanduser(GlobalDefines.case_generate_path)))
効果画像: