Для моей программы я записываю файл, но теперь местоположение жестко закодировано, потому что я не знаю, как получить путь к папке из активной папки. И я также хочу иметь возможность удалять файлы и папки, создавать папки и затем открывать один или несколько файлов для создания 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>
Теперь я получаю древовидное представление и могу записать файл по жестко заданному пути с заполненным именем файла. И в первый раз нет никаких сообщений об ошибках.