Secara otomatis menyimpan skrip python di QGIS

9

Saat menulis skrip python, QGIS tidak menyimpannya ketika pengguna menyimpan proyek utamanya dengan ctrl+Sperintah atau dengan Project->Save. Selain itu, ketika meninggalkan QGIS, program ini tidak memperingatkan tentang perubahan yang tidak disimpan dalam skrip python bahkan jika ia memperingatkan tentang perubahan yang belum disimpan ke proyek dan menawarkan untuk menyimpannya.

Apakah ada opsi untuk mengubah perilaku ini?

Saya harus menambahkan bahwa menggunakan opsi dialog untuk menyimpan proyek ketika berhenti memang menyelamatkan proyek, tetapi bukan skrip python. Itu hanya hilang.

almerillat
sumber
2
Poin yang baik, akan menyenangkan untuk memiliki peringatan, saya membuat pengalaman menyakitkan saya juga, ketika saya tidak sengaja menutup dan menyelamatkan proyek, di mana perubahan skrip python hilang ... Saya tidak punya solusi, tetapi solusi saya adalah menggunakan editor teks eksternal (saya menggunakan tautan Atom ). Ini menyimpan perubahan Anda dan Qgis akan secara otomatis memuat ulang skrip Anda, bahkan ketika sudah terbuka ...
ADorsch
3
Jika Anda menjalankan skrip di Editor Konsol Python , ada opsi "Simpan skrip otomatis sebelum menjalankan" yang berfungsi seperti yang dikatakan. Ini tidak akan menjawab pertanyaan Anda, tetapi mungkin membantu Anda menyimpan perubahan yang Anda buat saat menjalankan skrip.
Joseph

Jawaban:

4

Jika Anda ingin menyimpan skrip python saat ini di Python Editor setiap kali Anda menyimpan proyek Anda, ketikkan yang berikut ke konsol:

from PyQt4.QtGui import QDockWidget
def save_project():
    consoleWidget = iface.mainWindow().findChild( QDockWidget, 'PythonConsole' )
    consoleWidget.console.saveScriptFile()

QgsProject.instance().projectSaved.connect(save_project)

Ini pada dasarnya menghubungkan projectSaved () sinyal ke saveScriptFile () fungsi dalam konsol python.


Penghargaan untuk Germán Carrillo atas jawabannya dalam posting ini yang menjadi dasar jawaban di atas.



Edit:

Salah satu metode untuk secara otomatis menyimpan semua skrip adalah dengan sedikit memodifikasi file console.py pemrosesan Anda yang dapat ditemukan di direktori QGIS Anda. Sebagai contoh:

C:/Program Files/QGIS 2.18/apps/qgis/python/console/console.py

Temukan def saveScriptFile(self):fungsinya dan ganti baris pertama:

tabWidget = self.tabEditorWidget.currentWidget()

dengan yang berikut dan inden semuanya setelah:

for i in range(self.tabEditorWidget.count()):
    tabWidget = self.tabEditorWidget.widget(i)

Sehingga terlihat seperti:

def saveScriptFile(self):
    for i in range(self.tabEditorWidget.count()):
        tabWidget = self.tabEditorWidget.widget(i)
        try:
            tabWidget.save()
        except (IOError, OSError) as error:
            msgText = QCoreApplication.translate('PythonConsole',
                                                 'The file <b>{0}</b> could not be saved. Error: {1}').format(tabWidget.path,
                                                                                                              error.strerror)
            self.callWidgetMessageBarEditor(msgText, 2, False)

Simpan file.

Sekarang kita perlu membuat file startup.py di /.qgis2/python/direktori Anda , file ini dimuat ketika QGIS dijalankan sehingga akan menjalankan kode yang disimpan di dalamnya. Sertakan kode berikut:

from qgis.core import QgsProject
from qgis.utils import iface
from PyQt4.QtGui import QDockWidget
def save_project():
    consoleWidget = iface.mainWindow().findChild( QDockWidget, 'PythonConsole' )
    consoleWidget.console.saveScriptFile()

QgsProject.instance().projectSaved.connect(save_project)

Simpan file.

Sekarang, mudah-mudahan, ketika Anda memuat QGIS dan menyimpan proyek, semua skrip yang dibuka di editor konsol harus disimpan.


(Catatan: Saya cukup yakin Anda dapat mengulangi skrip yang dibuka di editor konsol tetapi belum menemukannya. Ini akan menjadi metode yang jauh lebih baik dan tidak mengganggu karena tidak mengubah kode sumber.)

Yusuf
sumber
1
Kode yang bagus yang mengisyaratkan jawaban. Namun, ini hanya menyimpan skrip python saat ini di Python Editor (seperti yang Anda katakan), tetapi skrip lain tidak disimpan ... Selain itu, perilaku ini hilang setelah menutup QGIS. Masih memberi Anda upvote untuk jawaban yang bagus =)
almerillat
@almerillat - Terima kasih, saya telah mengedit posting untuk memasukkan metode yang mungkin :)
Joseph
1
Wow, mengesankan. Ini berfungsi seperti pesona selama Anda indentasi dengan spasi dan bukan tab (seperti yang saya keliru). Selama tidak ada solusi yang lebih baik tersedia, saya akan menerimanya. Terima kasih !
almerillat
@almerillat Selamat datang, senang itu berhasil! Ya, semoga solusi yang lebih baik akan diposting :)
Joseph