欢迎大家同时关注我在仿真秀中的账号——“ANSA攻城狮 ”,会有更多干货文章以及课程。
上篇文章ANSA二次开发——BCGUI简介(1)介绍了常用的组件及他们在ANSA中的显示效果。那么这些组件是怎么被创建出来的,又是怎么布局排列的呢?
首先组件的创建是比较简单的。上文中提到的组件名字后面加上Create就是这个组件的创建函数。
下面以最简单的按键为例。
第一步,需要导入必要的库。
import ansa
from ansa import guitk
第二步,不管你要创建什么样的界面,一定要先创建一个BCWindow窗口,所有的组件都是直接或者间接依附在BCWindow上的。这就像画画之前你需要一块画布,BCWindow就是那块画布。这里同理使用BCWindowCreate创建BCWindow窗口。这里对于BCWindowCreate中的参数暂且不做解释,后面的文章会对常见的组件创建函数的参数、返回值做详细的讲解。这里只需要知道BCWindowCreate()函数创建了BCWindow窗口,而w代表了新创建的BCWindow窗口。
import ansa
from ansa import guitk
def main():
#创建BCWindows窗口
w = guitk.BCWindowCreate("Buttons", guitk.constants.BCOnExitDestroy)
第三步,创建一个BCPushButton组件,且这个组件依附于BCWindow窗口。这里可以看到BCPushButtonCreate()中第一个参数是w,也就是BCWindow窗口。这里我们再创建一个点击按钮后执行打印“Button clicked”操作的函数clickFuction()。
import ansa
from ansa import guitk
def main():
#创建BCWindows窗口
w = guitk.BCWindowCreate("Buttons", guitk.constants.BCOnExitDestroy)
#创建BCPushButton组件,依附于BCWindow窗口
pbut = guitk.BCPushButtonCreate(w, "Open", clickFunction, None)
#点击按钮后触发的操作
def clickFunction(b, data):
print("Button clicked")
return 0
最后一步,显示窗口、控件
import ansa
from ansa import guitk
def main():
#创建BCWindows窗口
w = guitk.BCWindowCreate("Buttons", guitk.constants.BCOnExitDestroy)
#创建BCPushButton组件,依附于BCWindow窗口
pbut = guitk.BCPushButtonCreate(w, "Open", clickFunction, None)
#显示窗口、控件
guitk.BCShow(w)
#点击按钮后触发的操作
def clickFunction(b, data):
print("Button clicked")
return 0
我们来调用一下main()函数,屏幕上就会出现下面的界面。
按下按钮后会在ansa的左下角打印出“Button clicked”。
至此我们已经成功创建出一个能够实现具体功能的BCPushButton按钮。相信看到这里大家已经能够了解Ansa二次开发创建界面操作的逻辑:
1.创建最底层的BCWindow窗口
2.在BCWindow上创建各种组件,组件可以依附于BCWindow,也可以依附于其他组件。这过程中会涉及到组件布局以及设置组件的一些函数。
3.BCShow()显示窗口及组件
下面我们具体将第一篇文章中不同组件的创建函数的参数、返回值详细讲解一下以及这些组件创建的逻辑。对于控件在ANSA中样子比较迷惑的同学,建议先移步到这里
注意这里创建的BCFrame是空白的,你需要使用guitk.BCBoxLayoutCreate()函数规定在BCFrame中的布局。
这里创建的是一个可以自动滚动的BCTicker,当窗口相对于文字内容过小时文字自动滚动显示。用户也可以点击鼠标左键拖动文字进行查看。
BCSpinBox中显示的数字为整数,最小数值为1,最大值为100,每次点击上、下箭头所增加或减少的数值为1,且无法更改,所以一般建议使用更加灵活的BCSpinBoxCreateDouble()函数。
这里解释一下使用这个控件的逻辑
这里BCWidgetStackCreate()相当于你创建一个盒子,这个盒子可以放放很多的纸张,刚刚创建时这个盒子是空的,从外边往里看什么都没有。
这时需要使用guitk.BCWidgetStackAddWidget(ws,w,id)来创建一张张放进盒子里的纸张,ws就是BCWidgetStack这个盒子;w就是你创建的纸张,可以是BCFrame,也可以是BCPushButton,也可以是其他的控件;id就是你把这张纸贴上标签,它放在第几个。注意这里你从外边只能看见最上面纸的内容。
最后你需要使用guitk.BCWidgetStackRaiseWidget(ws,w)或者guitk.BCWidgetStackRaiseId(ws,id)来让你想查看的纸张位于第一个显示,比如你把最下面的纸抽上来放在最上面,Stack不就是堆叠的意思吗。
BCTabWidget这个控件的使用逻辑和BCStackWidget控件的使用逻辑大致相同,唯一需要注意的是BCStackWidget是控件和控件之间是上下重合堆叠的关系,BCTabWidget中各个控件是相当于水平展开 ,你可以想象成下面这样。
BCTabWidgetCreate()需要配合guitk.BCTabWidgetAddTab(tw, w, label)函数使用,BCTabWidgetAddTab(tw, w, label)中将控件w以label形式的名字至于TabWidget控件中。相当于你把扑克插入到上面的图片中,当然事先你需要创建一个控件(扑克)。
parent (object):所依附的父类控件或布局
通常与guitk.BCWidgetExpandSetWidget(wex, managedWidget)一起使用,使用的逻辑是当文本内容过多时,首先使用guitk.BCWidgetExpandCreate()创建BCWidgetExpand,在BCWidgetExpand里创建需要显示内容的控件,然后使用guitk.BCWidgetExpandSetWidget()将需要显示内容的控件的内容在BCWidgetExpand中进行扩展。
如果你只想用户输入整数或小数那么可以使用guitk.BCLineEditCreateInt()或guitk.BCLineEditCreateDouble()