我不是一個程式設計師,也不懂python開發語言,
純粹出於興趣看了看這方面的資料,寫個簡單的入門資料,
希望能夠拋磚引玉,期待今後不斷有更多優秀的python 插件出現。
資源:
1. 本家的開發說明,作為入門很好。本文根據這篇作成。
http://www.xpluginsdk.org/downloads/Using%20Python%20with%20the%20PythonInterface%20Plugin.pdf
2. 本家提供的樣例程序,一切還都是看代碼吧,這是最好的學習方法。http://www.xpluginsdk.org/downloads/PythonScripts.zip
----------------------------------------------------
首先,你應該安裝了PythonInterface吧,如果不知道的話,
在這個下載頁面里有最新的版本,你一定要下載適合你機器的Python版本的PythonInterface.zip,
並安裝到plugins目錄下。PythonInterface對應的插件都放在PythonScripts目錄下面。
源程序文件的擴展名應為.py,比如"helloworld.py",
文件放到/Resources/plugins/PythonScipts目錄下面。
支 持 本 站: 捐贈伺服器等運維費用,需要您的支持!
一個最基本的程序架構如下,
class PythonInterface:
def XPluginStart(self):
self.Name = "Template"
self.Sig = "SandyBarbour.Python.Template"
self.Desc = "A test script for the Python Interface."
return self.Name, self.Sig, self.Desc
def XPluginStop(self):
passdef XPluginEnable(self):
return 1def XPluginDisable(self):
passdef XPluginReceiveMessage(self, inFromWho, inMessage, inParam):
pass
也就是要定義一個PythonInterface類,
由XPluginStart方法來啟動該插件,由XPluginStop來關閉該插件,
由XPluginEnable和XPluginDisable來管理enable和disable該插件,
由XPluginReceiveMessage來接受系統發來的消息並處理。
pass的意思好像是什麼都不做。
下面是可以在畫面上顯示窗口,顯示框和文字所需要的函數,
from XPLMDisplay import *
XPLMCreateWindow() -- 生成窗口
XPLMDestroyWindow() -- 刪除窗口
XPLMGetWindowGeometry() -- 得到窗口的位置資訊
from XPLMGraphics import *
XPLMDrawTranslucentDarkBox() -- 顯示一個半透明的灰色顯示框
XPLMDrawString() -- 顯示字符串
生成窗口的例子如下,一般放到XPluginStart中,
self.WindowId = XPLMCreateWindow(self, 50, 600, 300, 400, 1, self.DrawWindowCB, self.KeyCB, self.MouseClickCB, 0)
並在XPluginStop中刪除這個窗口,self.WindowId 為窗口id,
XPLMDestroyWindow(self, self.WindowId)。
self.DrawWindowCB, self.KeyCB, self.MouseClickCB分別指向窗口,鍵盤和滑鼠的回調函數。
描畫窗口需要定義函數DrawWindowCallback,
def DrawWindowCallback(self, inWindowID, inRefcon):
pass
可以在這個函數中使用
XPLMGetWindowGeometry(inWindowID, lLeft, lTop, lRight, lBottom)
得到窗口的坐標;
使用
gResult = XPLMDrawTranslucentDarkBox(left, top, right, bottom)
在指定的位置上顯示半透明顯示框;
還可以使用指定的顏色,位置和字體
gResult = XPLMDrawString(colour, left + 5, top - 20, Desc, 0, xplmFont_Basic)
來顯示文本。
接受滑鼠操作使用需要定義MouseClickCallback回調函數,
def MouseClickCallback(self, inWindowID, x, y, inMouse, inRefcon):
pass
滑鼠是否按下可以通過inMouse的值來判斷,如下所示:
if ((inMouse == xplm_MouseDown) or (inMouse == xplm_MouseUp)):
self.Clicked = 1 - self.Clicked
類似的,鍵盤操作需要KeyCallback函數,
def KeyCallback(self, inWindowID, inKey, inFlags, inVirtualKey, inRefcon, losingFocus):
pass
最基本的函數就是這些了,讓我們看一下這個helloworld的程序,
它在畫面上顯示一個框,當按下滑鼠是顯示"I'm a plugin 1"文字,
送開滑鼠後會顯示"Hello World1"文字。
----------------------------------------------------------------------
from XPLMDisplay import *
from XPLMGraphics import *class PythonInterface:
defXPluginStart(self):
self.Name = "Template"
self.Sig = "SandyBarbour.Python.Template"
self.Desc = "A test script for the Python Interface."
self.Clicked = 0
self.DrawWindowCB = self.DrawWindowCallback
self.KeyCB = self.KeyCallback
self.MouseClickCB = self.MouseClickCallback
self.WindowId = XPLMCreateWindow(self, 50, 600, 300, 400, 1, self.DrawWindowCB, self.KeyCB, self.MouseClickCB, 0)
return self.Name, self.Sig, self.DescdefXPluginStop(self):
XPLMDestroyWindow(self, self.WindowId)
passdefXPluginEnable(self):
return1
def XPluginDisable(self):
passdef XPluginReceiveMessage(self, inFromWho, inMessage, inParam):
passdef DrawWindowCallback(self, inWindowID, inRefcon):
lLeft = []; lTop = []; lRight = []; lBottom = []XPLMGetWindowGeometry(inWindowID, lLeft, lTop, lRight, lBottom)
left = int(lLeft[0]); top = int(lTop[0]); right = int(lRight[0]); bottom = int(lBottom[0])gResult = XPLMDrawTranslucentDarkBox(left, top, right, bottom)
colour = 1.0, 1.0, 1.0if self.Clicked:
Desc = "I'm a plugin 1"
else:
Desc = "Hello World1"
gResult = XPLMDrawString(colour, left + 5, top - 20, Desc, 0, xplmFont_Basic)
passdef KeyCallback(self, inWindowID, inKey, inFlags, inVirtualKey, inRefcon, losingFocus):
pass
def MouseClickCallback(self, inWindowID, x, y, inMouse, inRefcon):
if ((inMouse == xplm_MouseDown) or (inMouse == xplm_MouseUp)):
self.Clicked = 1- self.Clicked
return1
----------------------------------------------------------------------
完
支 持 本 站: 捐贈伺服器等運維費用,需要您的支持!
留言簿