วิธีการเปลี่ยนตัวแปรโครงการโดยใช้ Python


10

ฉันต้องการเปลี่ยนค่าของตัวแปรโครงการที่ผู้ใช้กำหนด (สามารถแก้ไขได้ด้วยตนเองใน Project Settings | Variables) โดยใช้ Python console ฉันติดตามฟังก์ชัน setVariable () ในคลาส QgsExpressionContextScopeแต่ไม่ประสบความสำเร็จในการเปลี่ยนตัวแปรจริงในการตั้งค่าโครงการ รหัสของฉัน:

iface.mapCanvas().mapSettings().expressionContext().scope(0).setVariable('myvar',1)

ฉันคิดว่าฉันหลงทางในบริบทการแสดงออกที่แตกต่างกัน ...

คำตอบ:


11

ดูที่ QgsExpressionContextUtils ( https://qgis.org/api/classQgsExpressionContextUtils.html ) วิธีที่คุณต้องการคือ QgsExpressionContextUtils.setProjectVariable เช่น

QgsExpressionContextUtils.setProjectVariable('myvar','hello world')

แล้วการลบตัวแปรล่ะ? ฉันไม่พบวิธีการในQgsExpressionContextUtils
ismailsunni

ไม่มี API ระดับสูงในการทำเช่นนี้ อาจเป็นไปได้ว่าคุณสามารถลบตัวแปร NULLING (ตั้งค่าเป็นไม่มี) แต่ถ้าไม่คุณต้องใช้ QgsExpressionContextUtils.setProjectVariables ({}) และรีเซ็ตล็อตทั้งหมด ขั้นแรกคุณต้องตรวจสอบ QgsExpressionContextUtils.projectScope () และสร้าง dict ของตัวแปรทั้งหมดที่คุณต้องการเก็บไว้ มันยังห่างไกลจากอุดมคติ - แต่ก็น่าจะเป็นส่วนเสริมของ API ถ้าคุณต้องการมีส่วนร่วมในการพัฒนา QGIS และส่งคำขอดึงบน github ...
ndawson

ขอบคุณ @ndawson มันทำงานกับการทำงานของคุณเพื่อรีเซ็ตด้วยsetProjectVariables(preserved_variables)ฉันได้ตรวจสอบรหัส C ++ ฉันหวังว่าฉันสามารถมีส่วนร่วมในการทำงาน
ismailsunni

QgsExpressionContextUtils.removeProjectVariableมีอยู่ตอนนี้!
letmaik
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.