Tôi đã thử đi qua IRC để xem mọi người có thể giúp tôi giải quyết vấn đề này không, nhưng phương tiện có vẻ hơi vụng về để làm cho bất kỳ câu trả lời rõ ràng, vì vậy tôi sẽ thử thay thế.
Tôi muốn lập trình một ứng dụng độc lập bằng PyQGIS theo cách tôi có thể lập trình các ứng dụng độc lập bằng ArcPy.
PyQGIS là đơn giản. Tôi không gặp khó khăn gì khi chạy các tập lệnh Python trong trình soạn thảo bảng điều khiển QGIS. Tuy nhiên, để sử dụng các ràng buộc Python trong một tập lệnh độc lập, tôi khuyên tôi phải thay đổi cài đặt môi trường bằng tập lệnh bó (Tôi đang sử dụng Windows Vista tại nhà, vì vậy chúng tôi đang nói về kịch bản hàng loạt cho Windows). Điều này đã dẫn đến một mớ hỗn độn về phía tôi, vì tôi không thực sự hiểu được kịch bản hàng loạt và tôi không thích ý tưởng rằng tôi đang đặt lại một môi trường cần phải là một cách nhất định cho các ứng dụng khác mà tôi chạy.
Tôi đang gặp khó khăn để hiểu tại sao các hướng dẫn tạo các cài đặt này lại phức tạp đến mức không cần thiết và tại sao chúng không có một dòng mã nói "hãy đến nơi liên kết, làm cho các thư viện tôi muốn có sẵn cho chương trình này để sử dụng ) Chắc chắn ArcPy không yêu cầu mọi người phải loay hoay với các cài đặt môi trường của máy tính, vì vậy tôi gặp khó khăn trong việc hiểu tại sao PyQGIS lại làm như vậy. Có vẻ như mọi người sẽ bỏ cuộc thay vì tự học Ngôn ngữ lập trình Windows Batch.
Bây giờ, tôi nhận thấy rằng khi tôi chạy một tập lệnh trong trình soạn thảo bảng điều khiển của QGIS, nó sẽ hoạt động. Cấp, nó cũng làm cho phần còn lại của QGIS không thể sử dụng được sau khi tập lệnh chạy, do đó tôi phải khởi động lại QGIS sau đó, nhưng tập lệnh hoạt động chính xác như tôi đã lập trình để nó hoạt động. Nhưng khi tôi làm như vậy bên ngoài ứng dụng QGIS thì không. Vấn đề không xuất hiện là tôi đã không nhập được một số gói Python được ứng dụng QGIS nhập tự động (qgis.core và qgis.utils) - Tôi có các báo cáo nhập đó trong tập lệnh độc lập của mình, cùng với tất cả các gói khác nhập kịch bản yêu cầu. Điều này khiến tôi tin rằng sự khác biệt là ứng dụng QGIS đặt chính xác các biến môi trường bên ngoài, nhưng các biến đó không được đặt đúng khi tôi chạy nó dưới dạng một tập lệnh độc lập.
Ngoài ra, khi tôi chạy tập lệnh dưới dạng tập lệnh độc lập, nó sẽ thông qua tất cả các mã mà không gây ra lỗi; nó chỉ đơn giản là không làm những gì các lệnh mã. Khi tôi chạy tập lệnh trong trình soạn thảo giao diện điều khiển, nó thực hiện tất cả chính xác. Khi tôi chạy nó dưới dạng độc lập, nó sẽ tạo ra một cửa sổ, sau đó ngay lập tức phá hủy nó, trong khi ném không có lỗi. Vì vậy, intepreter hiểu tất cả mọi thứ tôi yêu cầu kịch bản thực hiện - nó sẽ không làm điều đó.
Đây là kịch bản:
from PyQt4 import *
from PyQt4 import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from qgis.core import *
from qgis.gui import *
from qgis.utils import *
import Tkinter
from Tkinter import *
import sys
import os
qgishome = "c:/OSGeo4W/apps/qgis/"
app = QgsApplication([], True)
QgsApplication.setPrefixPath(qgishome, True)
QgsApplication.initQgis()
canvas = QgsMapCanvas()
canvas.setCanvasColor(Qt.yellow)
canvas.enableAntiAliasing(True)
canvas.show()
layer = QgsVectorLayer(r"c:/GIS Data/fed308/cpc.shp", "Ridings", "ogr")
reg = QgsMapLayerRegistry.instance()
reg.addMapLayer(layer)
canvas.setExtent(layer.extent())
canvas.setLayerSet([QgsMapCanvasLayer(layer)])
QgsApplication.exitQgis()
Xin vui lòng ... có một số cách tôi có thể chạy tập lệnh này bên ngoài QGIS và để nó hoạt động như trong QGIS (lý tưởng nhất là không tắt mọi thứ ở cuối)?
QGIS là một chương trình tuyệt vời và PyQGIS có vẻ trực quan như ArcPy và sẽ là một lợi thế thực sự cho một phần mềm nguồn mở - nhưng nếu mọi người phải trải qua tất cả các vòng tôi đã trải qua, và vẫn chưa có ứng dụng độc lập truy cập vào thư viện PyQGIS theo cách họ có quyền truy cập vào ArcPy, đối với tôi, PyQGIS sẽ không được sử dụng nhiều cho mọi người. Tôi hy vọng tôi đã sai và điều này dễ dàng hơn cho đến nay. Có ai có giải pháp không?