Как получить активную папку из QFileSystemModel из TreeView - PullRequest
0 голосов
/ 02 октября 2019

Для моей программы я записываю файл, но теперь местоположение жестко закодировано, потому что я не знаю, как получить путь к папке из активной папки. И я также хочу иметь возможность удалять файлы и папки, создавать папки и затем открывать один или несколько файлов для создания grph.

Поэтому я надеюсь получить ответ на вопрос: как получить активный путь идругие бонусы.

Я новичок в python и pyqt, я научился нескольким вещам и надеюсь, что после нескольких заданий я получу навык.

python code

import os
import sys
from pathlib import Path

from functools import partial

import sounddevice as sd
from scipy.io.wavfile import write

from PyQt5 import QtCore, QtGui, QtWidgets, uic

qtcreator_file = "mainwindow.ui"  # Enter file here.
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtcreator_file)


class CaptureWorker(QtCore.QObject):
    started = QtCore.pyqtSignal()
    finished = QtCore.pyqtSignal()

    @QtCore.pyqtSlot(str)
    def save_to(self, path):
        self.started.emit()
        fs = 44100  # Sample rate
        seconds = 6  # Duration of recording
        myrecording = sd.rec(int(seconds * fs), samplerate=fs, channels=2)
        sd.wait()
        write(path, fs, myrecording)
        self.finished.emit()


class MyWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(MyWindow, self).__init__(parent)
        self.setupUi(self)

        self.root_path = "D:/DemoGIPhoofdmap/"

        model = QtWidgets.QFileSystemModel(self)
        self.filestruckture.setModel(model)
        model.setRootPath(self.root_path)
        self.filestruckture.setRootIndex(model.index(model.rootPath()))
        self.filestruckture.hideColumn(1)
        self.filestruckture.hideColumn(2)
        self.filestruckture.hideColumn(3)

        thread = QtCore.QThread(self)
        thread.start()

        self.capture_worker = CaptureWorker()
        self.capture_worker.moveToThread(thread)

        self.capture_worker.started.connect(partial(self.opnemen.setEnabled, False))
        self.capture_worker.finished.connect(partial(self.opnemen.setEnabled, True))

        self.opnemen.clicked.connect(self.capture)

    def capture(self):
        name = self.filename.text()
        if name:
            locatie = self.root_path
            locatiepath = Path(locatie)
            file_name = os.path.join(locatiepath, name + ".wav")
            wrapper = partial(self.capture_worker.save_to, file_name)
            QtCore.QTimer.singleShot(0, wrapper)
        else:
            print("set the filename")


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())




qt xml code

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
    <x>0</x>
    <y>0</y>
    <width>615</width>
    <height>598</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QHBoxLayout" name="horizontalLayout">
    <item>
    <widget class="QTreeView" name="filestruckture"/>
    </item>
    <item>
    <layout class="QGridLayout" name="gridLayout">
    <item row="1" column="0" colspan="2">
    <widget class="QLineEdit" name="filename"/>
    </item>
    <item row="3" column="0">
    <widget class="QPushButton" name="nieuwemap">
        <property name="text">
        <string>New folder</string>
        </property>
    </widget>
    </item>
    <item row="4" column="0">
    <widget class="QPushButton" name="verwijderen">
        <property name="text">
        <string>Delete</string>
        </property>
    </widget>
    </item>
    <item row="2" column="1">
    <widget class="QPushButton" name="importeer">
        <property name="text">
        <string>Inport</string>
        </property>
    </widget>
    </item>
    <item row="0" column="0" colspan="2">
    <widget class="QLabel" name="label">
        <property name="text">
        <string>File name for new item:</string>
        </property>
    </widget>
    </item>
    <item row="3" column="1">
    <widget class="QPushButton" name="hernoem">
        <property name="text">
        <string>Rename</string>
        </property>
    </widget>
    </item>
    <item row="2" column="0">
    <widget class="QPushButton" name="opnemen">
        <property name="text">
        <string>Capture</string>
        </property>
    </widget>
    </item>
    <item row="5" column="0">
    <spacer name="verticalSpacer">
        <property name="orientation">
        <enum>Qt::Vertical</enum>
        </property>
        <property name="sizeHint" stdset="0">
        <size>
        <width>20</width>
        <height>40</height>
        </size>
        </property>
    </spacer>
    </item>
    </layout>
    </item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
    <rect>
    <x>0</x>
    <y>0</y>
    <width>615</width>
    <height>21</height>
    </rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>

Теперь я получаю древовидное представление и могу записать файл по жестко заданному пути с заполненным именем файла. И в первый раз нет никаких сообщений об ошибках.

...