PythonStudio是一个极强的开发Python的IDE工具,官网地址是:https://glsite.com/ ,在官网可以下载最新版的PythonStudio,同时,在使用PythonStudio时,它也能及时为用户升到最新版本。它使用的是Delphi的控件,常用的内容是与Delphi一致的。但是相关文档并一定完整。现在我试试能否逐步把它的控件常用用法写一点点,也作为PythonStudio的参考。
从1.2.1版开始,PythonStudio又增加了很多新的控件。
TGridPanel是网格式面板,它与TFlowPanel一样,可以较快地进行布局,但与TFlowPanel不同,TFlowPanel是流式布局,当面板调整大小,控件会自动根据大小移动,而TGridPanel是网格式的,可以理解为,已定好一行有几列,当调整大小时,通常只是根据比例关系来在行内移动控件。
如图,当插入TGridPanel后,可以根据需要设置行、列数,图中设置了4行3列,然后在代码中设置各行、列的比例关系(也可以在对象检查器中设置,但是会相当麻烦),再将控件按顺序添加到面板中,即完成了操作。
组件位置
TGridPanel位于Additional下
使用方式
设置网格的行列数
将TGridPanel添加到窗体后,在对象树中,双击ColumnCollection和RowCollection,即可打开行、列的编辑窗口,添加或删除行列
也可以通过代码来添加行、列
代码为:
# 添加列
self.GridPanel1.ColumnCollection.Add()
# 添加行
self.GridPanel1.RowCollection.Add()
设置行高、列宽
默认情况下,新增加的行高、列宽均为0,通常建议是在代码中进行修改,但也可以在对象检查器中进行修改(需要足够的耐心)
对象检查器中修改
如果均分行,列,方法是:对新增行的SizeStyle保持默认的ssPercent,然后将Value设置为与前一行(列)相同的值,这个值为 100/(n-1)
如,对第三行进行设置,需要将其Value设置为100/2=50,对第四列进行设置为100/3=33.3333333
代码中修改
用以下代码直接对每行每列进行修改,行的总值 为100,列的总值 为100,如果不为100,会自动为你计算,以百分比形式进行换算,比如总共两列,分别为10和30,会自动按25和75进行设置。
def __init__(self, owner):
self.GridPanel1 = GridPanel(self)
self.LoadProps(os.path.join(os.path.dirname(os.path.abspath(__file__)), "Unit1.pydfm"))
self.GridPanel1.ColumnCollection[0].value=25
self.GridPanel1.ColumnCollection[1].value=30
self.GridPanel1.ColumnCollection[2].value=45
self.GridPanel1.RowCollection[0].value=25
self.GridPanel1.RowCollection[1].value=25
self.GridPanel1.RowCollection[2].value=25
self.GridPanel1.RowCollection[3].value=25
添加控件
虽然在对象检查器中有对ControlCollection属性进行设置的地方,但是由于这个属性是获取已有的控件的,而已有的控件是不允许加入到TGridPanel的,所以这个属性设置不能用,必须 通过代码设置
如:
for i in range(12):
btn=Button(self)
btn.Name="btn" + str(i)
btn.Parent=self.GridPanel1
btn.Caption="aaa" +str(i)
btn.Align=alClient
这段代码按顺序加入了12个按钮
行列的合并
在HTML中,有RowSpan和ColSpan,对行和列进行合并设置,在GridPanel中也有类似的设计,只是,建议只对列进行合并设置,不要对行进行合并设置。
注意:在设置前,需要先建立完控件
如果我们用以下代码进行设置
self.GridPanel1.ColumnCollection[0].value=25
self.GridPanel1.ColumnCollection[1].value=30
self.GridPanel1.ColumnCollection[2].value=45
self.GridPanel1.RowCollection[0].value=25
self.GridPanel1.RowCollection[1].value=25
self.GridPanel1.RowCollection[2].value=25
self.GridPanel1.RowCollection[3].value=25
for i in range(12):
btn=Button(self)
btn.Name="btn" + str(i)
btn.Parent=self.GridPanel1
btn.Caption="aaa" +str(i)
btn.Align=alClient
self.GridPanel1.ControlCollection[0].ColumnSpan=2
self.GridPanel1.ControlCollection[0].RowSpan=2
先建立 了一个4*3的网格,并加入了12个按钮,再对第一行第一列进行2行2列的合并,会发现效果如下:
其中AAA0按钮的确是完成了两行两列的合并,但第aaa2和aaa3两个按钮重叠了,与AAA0在同一个网络中
如果仅对列进行合并,即:
self.GridPanel1.ControlCollection[0].ColumnSpan=2
效果为:
其余的属性还是比较简单,一眼就可以看明白,作为一个容器,其他也没有什么要注意的,有问题可以一起去硅量实验室的论坛 https://forum.glsite.com/进行讨论。