Làm cách nào để áp dụng các thay đổi trong QSinstall ngay lập tức?


15

Với PyQGIS, bạn có thể thay đổi các cài đặt khác nhau, chẳng hạn như làm cho các nhóm trong Bảng điều khiển Lớp (hoặc mục lục) được in đậm:

from PyQt4.QtCore import QSettings
QSettings().setValue("/Qgis/legendGroupsBold", True)

Các cài đặt được viết có thể được nhìn thấy từ các tùy chọn hoặc từ gõ:

QSettings().value("/Qgis/legendGroupsBold")
>>> u'true'

Nhưng nó không được áp dụng. Tôi nghĩ rằng sử dụng

QSettings().sync()

có thể giúp đỡ nhưng tiếc là không. Cách duy nhất để áp dụng nó là vào GUI ( Settings > Options) sau đó nhấp OKhoặc khởi động lại QGIS.

Có một phương pháp để làm điều này thông qua PyQGIS?


Bối cảnh :

Tôi muốn thêm phần này dưới dạng macro trong tệp dự án để đảm bảo (cho mục đích thẩm mỹ) rằng chỉ tên nhóm được in đậm còn tên lớp thì không. Do đó, sẽ rất lý tưởng nếu QSinstall được áp dụng khi dự án được tải (cài đặt ban đầu sẽ được áp dụng lại khi dự án đóng).


Khi bạn gọi sync () để thực hiện các thay đổi của mình, bạn có gọi trạng thái () không?
sao Sa hoàng

@whyzar - Cảm ơn nhưng đã kiểm tra mà vẫn không thay đổi.
Joseph

2
Thật lạ, có thể là một lỗi vì xảy ra tương tự khi sử dụng. QSettings().setValue("/qgis/legendLayersBold", False)Tôi nghĩ rằng vấn đề nằm ở dòng này github.com/qgis/QGIS/blob/release-2_18/src/app/iêu
Fran Raga

1
phương pháp có thể là QgisApp::instance()->legend()->updateLegendItemStyles();nhưng trong một phiên bản trong tương lai có lẽ?
Fran Raga

@FranciscoRaga - Cảm ơn liên kết, nó có vẻ như là một lỗi. Tôi đã nghĩ đến việc đăng báo cáo lỗi nhưng với QGIS 3.0 sắp ra mắt, tôi sẽ chờ xem vấn đề này có còn tồn tại trong phiên bản mới không =)
Joseph

Câu trả lời:


2

Tôi nghĩ rằng điều đó là không thể trừ khi bạn viết một khóa với trạng thái mặc định vào đó, \HKEY_CURRENT_USER\Software\QGIS\qgis\UI\state hãy xem đây .

Thật ra, khi chúng tôi khởi động lại phần mềm, nó sẽ tự động làm điều này cho chúng tôi.

kiểm tra giải pháp này:

#!/usr/bin/python
from PyQt4.QtCore import QSettings
QSettings( "QGIS", "QGIS2" ).remove( "/UI/state" )
QSettings( "QGIS", "QGIS2" ).remove( "/ComposerUI/state" )


#(for 1.8 it's QGIS instead of QGIS2 IIRC).

nếu nó không hoạt động, bạn phải viết một kịch bản để viết lại giá trị đăng ký đó.

để làm như vậy, bạn cần sử dụng winreg để thao tác các giá trị đăng ký.

bạn có thể xem các khóa registry của mình thông qua regedit.exe nếu bạn sử dụng windows.

Tôi hy vọng cái này sẽ giúp bạn...


Cảm ơn câu trả lời của bạn, tôi nghĩ rằng tôi vẫn sẽ phải khởi động lại QGIS khi khóa được viết bởi macro để QGIS đọc nó trong khi khởi động. Vẫn đang cố gắng tìm cách :)
Joseph
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.