一种图形用户界面编写的方法、系统、设备和存储介质与流程

文档序号:29941517发布日期:2022-05-07 14:45阅读:167来源:国知局
一种图形用户界面编写的方法、系统、设备和存储介质与流程

1.本发明属于图形用户界面开发技术领域,特别涉及一种图形用户界面编写的方法、系统、设备和存储介质。


背景技术:

2.gui界面是开发桌面客户端必不可少的一部分,gui界面即图形用户界面;但是图形用户界面的编写需要用户具备一定的编程能力,而且不同编程语言需要使用不同的编写形式,当不同项目中使用了不同语言时,就需要为每个项目配备不同的图形用户界面编程人员,而且不同图形用户界面无法做到统一管理。
3.现有技术中图形用户界面的编写方式包括:第一种,python借助pyqt5代码进行gui界面编写,可以借助qt-designer进行简单界面搭建,但是无法做到精确定位。第二种,java使用javafx或swing直接使用代码进行图形用户界面编写,需要用户具备较高的java编程经验。所以现有技术图形用户界面的编写方式使用具体语言实现的代码编写繁琐,需要图形用户界面编写人员对语言本身具备较高的知识储备,但是同时熟悉多种语言的人员较为稀缺,所以需要为不同语言的配备专门的图形用户界面编写人员。不同语言的图形用户界面代码实现没有统一标准,无法做到在不同语言中迁移。


技术实现要素:

4.为了解决上述技术问题,本发明提出了一种图形用户界面编写的方法、系统、设备和存储介质,使用json作为编写语句可以简化图形用户界面的编写方式。通过json将其转换为不同语言实现,可以方便对界面内容的统一管理。
5.为实现上述目的,本发明采用以下技术方案:
6.一种图形用户界面编写的方法,包括以下步骤:
7.采用json文本作为图形用户界面的编写规范;
8.读取所述json文本,在所述json文本符合规定的前提下,首先创建根组件,然后从外到内依次创建组件对象将所述将所述json文本解析为中间数据结构;
9.在所述中间数据结构解析完成后,从根组件对象开始依次将json文本中对象类型转换为相应语言中对应组件类型,并最终按照父子结构转换为相应代码。
10.进一步的,所述验证json文本是否符合规定的方法为:判断json文本是否错误或者判断json文本是否包含未指定的组件名称;如果出现错误或者包含未指定的组件,则停止执行并给出错误原因提示。
11.进一步的,所述创建根组件,然后从外到内依次创建组件对象将所述将所述json文本解析为待转换的数据结构的详细过程包括:
12.创建虚拟的根组件,并赋值为空;
13.从json文件最外层开始解析,如果最外层为对象类型,则根组件创建子组件列表;如果最外层为数组类型,则首先获取数组长度,并创造指定长度的子组件列表;
14.根据json文件中键值创建相应的对象类型,在所述对象类型创建成功后,将所述对象类型添加到所述子组件列表中;
15.读取所述键值对应的value的相关属性值,直到解析完整个json文本生成中间数据结构。
16.进一步的,所述读取所述键值对应的value的相关属性值的过程包括:
17.读取所述键值对应的value的sub-list值,如果包含所述sub-list值,则创建组件列表,如果不包含所述sub-list值,则不处理;
18.读取所述键值对应的value的style属性值,并将css格式字符串保存到对象的style属性中;
19.读取所述键值对应的value的除sub-list值和style属性值之外的其他属性值,并依次将所述其他属性赋值给相应对象属性。
20.进一步的,所述根据json文件中键值创建相应的对象类型包括:
21.如果键值为“button”,则创建button程序对象;
22.如果键值为“input”,则创建input程序对象。
23.进一步的,所述从根组件对象开始依次将json文本中对象类型转换为相应语言中对应组件类型的过程包括:
24.获取根组件中子组件列表,并将所述子组件列表中对象转换为实际语言环境下的对象值;
25.读取所述实际语言环境下对象的属性值,设置为待转换对象类型的属性值;
26.读取层叠样式表中的字符串值,并未对象设置样式,直到组件列表为空时停止。
27.进一步的,在所述获取根组件中子组件列表之前还包括:根据使用的语言环境,创建项目工程和配置文件生成项目启动环境。
28.本发明还提出了一种图形用户界面编写的系统,包括预处理模块、解析模块和转换模块;
29.所述预处理模块用于采用json文本作为图形用户界面的编写规范;
30.所述解析模块用于读取所述json文本,在所述json文本符合规定的前提下,首先创建根组件,然后从外到内依次创建组件对象将所述将所述json文本解析为中间数据结构;
31.所述转换模块用于在所述中间数据结构解析完成后,从根组件对象开始依次将json文本中对象类型转换为相应语言中对应组件类型,并最终按照父子结构转换为相应代码。
32.本发明还提出了一种设备,包括:
33.存储器,用于存储计算机程序;
34.处理器,用于执行所述计算机程序时实现所述的方法步骤。
35.本发明还提出了一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现所述的方法步骤。
36.发明内容中提供的效果仅仅是实施例的效果,而不是发明所有的全部效果,上述技术方案中的一个技术方案具有如下优点或有益效果:
37.本发明提出了一种图形用户界面编写的方法、系统、设备和存储介质,该方法包括
采用json文本作为图形用户界面的编写规范;读取所述json文本,在所述json文本符合规定的前提下,首先创建根组件,然后从外到内依次创建组件对象将将json文本解析为中间数据结构;在中间数据结构解析完成后,从根组件对象开始依次将json文本中对象类型转换为相应语言中对应组件类型,并最终按照父子结构转换为相应代码。基于一种图形用户界面编写的方法,还提出了一种图形用户界面编写的系统、设备和存储介质。本发明使用json作为编写语句可以简化gui界面的编写方式。通过json将其转换为不同语言实现,可以方便对界面内容的统一管理,同时实现一次编写,转换为不同语言实现的便利性。
附图说明
38.如图1为本发明实施例1一种图形用户界面编写的方法流程图;
39.如图2为本发明实施例1一种图形用户界面编写的方法中解析构建示意图;
40.如图3为本发明实施例1一种图形用户界面编写的方法中组件数据结构描述示意图;
41.如图4为本发明实施例2一种图形用户界面编写的系统示意图。
具体实施方式
42.为能清楚说明本方案的技术特点,下面通过具体实施方式,并结合其附图,对本发明进行详细阐述。下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。应当注意,在附图中所图示的部件不一定按比例绘制。本发明省略了对公知组件和处理技术及工艺的描述以避免不必要地限制本发明。
43.实施例1
44.本发明实施例1提出了一种图形用户界面编写的方法。使用不同语言的具体解析器,将其转换为本语言的具体代码实现的方法,并为不同组件的组织结构提供一致的表示形式,以达到跨语言gui界面编程的目的。
45.本发明以python和java语言的gui界面实现为例作为基础实施方案。当前python实现gui界面普遍使用pyqt5作为开发框架,java实现gui通常使用javafx作为开发框架。基于以上情况,本发明在实际转换时会将json文本转换为符合pyqt5和javafx标准的代码实现。
46.其中,json,全称为(javascript object notation)意思是javascript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式,易于人阅读和编写。同时也易于机器解析和生成。
47.gui,全称为(graphical user interface),意思是图形用户界面,是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务。
48.如图1为本发明实施例1一种图形用户界面编写的方法流程图;如图2为本发明实施例1一种图形用户界面编写的方法中解析构建示意图;
49.在步骤s101中,采用json文本作为图形用户界面的编写规范;
50.读取json文本后校验其文本的合规性,若json文本错误或包含未指定的组件名称,程序会直接停止执行并给出错误原因提示。若可以正常读取,则继续向下执行。
51.在步骤s102中,读取所述json文本,在json文本符合规定的前提下,首先创建根组件,然后从外到内依次创建组件对象将所述将所述json文本解析为中间数据结构。
52.在图2中,采用解析器依次解析其内容并转换为具体的数据结构描述。
53.创建虚拟的根组件,并赋值为空;
54.从json文件最外层开始解析,如果最外层为对象类型,则根组件创建子组件列表;如果最外层为数组类型,则首先获取数组长度,并创造指定长度的子组件列表;
55.根据json文件中键值创建相应的对象类型,在所述对象类型创建成功后,将所述对象类型添加到所述子组件列表中;
56.读取键值对应的value的相关属性值,直到解析完整个json文本生成中间数据结构。
57.详细的解析过程为:
58.(1)解析器首先会创建一个虚拟的根rootwidget对象。初始创建的rootwidget对象的子组件列表不会被创建,而是被赋值为none(python中被表示为none,java中被表示为null)。
59.(2)解析器解析json文件最外层,如果最外层为对象类型,rootwidget会创建长度为1子组件列表;如果最外层为数组类型,会先获数组长度,并创建指定长度的组件列表。
60.(3)解析器根据json中key值创建对应的对象类型,如key为“button”会创建buttonwidget对象;key为“input”会创建inputwidget对象。创建成功的对象依次添加到rootwidget的子列表中。每个对象的子组件列表默认都为none,只有在确定其确实包含子组件时才会按照4)中规则创建。
61.(4)解析器读取对应key中value的“sub-list”值,如果不包含该值,则不处理。如果包含该值,就按照2)中规则创建组件列表。
62.(5)解析器读取key对应value中的“style”属性值,并将在转换为css格式字符串保存到对象的style属性中。
63.(6)解析器读取key对应value中的其他属性值并依次将其赋值给具体对象属性。如果该对象没有定义该属性,则直接异常并停止执行。
64.(7)递归执行(2)、(3)、(4)、(5)和(6)过程,直到解析完整个json文本,最终生成图3所示数据结构。如图3为本发明实施例1一种图形用户界面编写的方法中组件数据结构描述示意图;
65.在解析的过程需要注意:
66.第一,所有组件都继承自顶层组件objectwidget,objectwidget中定义了所有组件的共有属性,如子组件列表等。
67.第二,json文本实际会被转换为对象进行表示,所以要保证json中的key类型为已经被定义的类型,不能是用户任意指定的类型。当解析器解析到未定义类型时会抛出异常并停止执行。
68.第三,组件具体对应类型必须通过key进行指定,key不区分大小写,都可以被正常解析。如按钮的key被表示为“button”;输入框的key被表示为“input”;多行文本的key被表
示为“text”。
69.第四,解析组件时的key值会被转换为对象中对应属性进行保存。每个组件都有自己特有的属性和公共属性,如用户定义的属性不存在则直接错误并退出。若用户没有指定属性值,会使用已经定义的默认值。
70.第五,组件样式在json中可以使用css方式设置(层叠样式表),最终后将其整理后保存为对象属性值。子组件样式如果没有单独设置,默认会继承父组件样式。
71.第六,如果组件中包含了其他组件,那么这些互不包含的组件会按照解析顺序依次存储到列表中
72.第七,数据结构描述默认会创建一个最顶层rootwidget对象,rootwidget也是objectwidget的子类,但是rootwidget在通过构建器转换为实际组件时不会被实际构建,其功能只是为了防止顶层对象本身为列表的情况。
73.在步骤s103中,在所述中间数据结构解析完成后,从根组件对象开始依次将json文本中对象类型转换为相应语言中对应组件类型,并最终按照父子结构转换为相应代码。
74.数据结构描述创建成功后,程序会触发其内置构建器执行。构建器从顶层根组件(rootwidget)对象开始依次将描述中的对象类型转换为具体语言中对应组件类型,并最终按照父子结构将其转换为具体代码实现。
75.构建器实现的过程包括:
76.(1):根据使用的语言环境,创建项目工程、配置文件等信息,生成项目启动环境。
77.(2):获取解析器解析封装的数据结构,获取rootwidget的子组件列表并将列表中对象转换为实际语言环境下的对象值,如buttonwidget在pyqt5中会被转换为qbutton对象,在javafx中会被转换为button对象;inputwidget在pyqt5中会被转换为qlineedit,在javafx中默认会被转换为textfield,根据“value-type”的不同,可能会被转换为passwordfield。
78.(3):读取数据结构中对象的属性值,并将其设置为实际对象类型的属性值。
79.(4):读取css的字符串值,并为对象设置样式。
80.(5):递归执行(2)、(3)和(4)过程,直到组件列表为none时停止。
81.本发明实施例1提出的一种图形用户界面编写的方法,使用json作为编写语句可以简化gui界面的编写方式。通过json将其转换为不同语言实现,可以方便对界面内容的统一管理,同时实现一次编写,转换为不同语言实现的便利性。
82.实施例2
83.基于本发明实施例1提出的一种图形用户界面编写的方法。本发明实施例2还提出了一种图形用户界面编写的系统,如图4为本发明实施例2一种图形用户界面编写的系统示意图,该系统还包括:预处理模块、解析模块和转换模块;
84.预处理模块用于采用json文本作为图形用户界面的编写规范;
85.解析模块用于读取所述json文本,在所述json文本符合规定的前提下,首先创建根组件,然后从外到内依次创建组件对象将所述将所述json文本解析为中间数据结构;
86.转换模块用于在所述中间数据结构解析完成后,从根组件对象开始依次将json文本中对象类型转换为相应语言中对应组件类型,并最终按照父子结构转换为相应代码。
87.在预处理模块中,验证json文本是否符合规定的方法为:判断json文本是否错误
或者判断json文本是否包含未指定的组件名称;如果出现错误或者包含未指定的组件,则停止执行并给出错误原因提示。
88.解析模块执行的过程为:创建虚拟的根组件,并赋值为空;
89.从json文件最外层开始解析,如果最外层为对象类型,则根组件创建子组件列表;如果最外层为数组类型,则首先获取数组长度,并创造指定长度的子组件列表;
90.根据json文件中键值创建相应的对象类型,在对象类型创建成功后,将所述对象类型添加到所述子组件列表中;
91.读取所键值对应的value的相关属性值,直到解析完整个json文本生成中间数据结构。读取键值对应的value的sub-list值,如果包含所述sub-list值,则创建组件列表,如果不包含所述sub-list值,则不处理;读取所述键值对应的value的style属性值,并将css格式字符串保存到对象的style属性中;读取键值对应的value的除sub-list值和style属性值之外的其他属性值,并依次将所述其他属性赋值给相应对象属性。
92.所述根据json文件中键值创建相应的对象类型包括:如果键值为“button”,则创建button程序对象;如果键值为“input”,则创建input程序对象。
93.转换模块执行的过程为:根据使用的语言环境,创建项目工程和配置文件生成项目启动环境。获取根组件中子组件列表,并将所述子组件列表中对象转换为实际语言环境下的对象值;读取所述实际语言环境下对象的属性值,设置为待转换对象类型的属性值;读取层叠样式表中的字符串值,并未对象设置样式,直到组件列表为空时停止。
94.本发明实施例2提出的一种图形用户界面编写的系统,使用json作为编写语句可以简化gui界面的编写方式。通过json将其转换为不同语言实现,可以方便对界面内容的统一管理,同时实现一次编写,转换为不同语言实现的便利性。
95.实施例3
96.本发明还提出了一种设备,包括:
97.存储器,用于存储计算机程序;
98.处理器,用于执行所述计算机程序时实现方法步骤如下:
99.如图1为本发明实施例1一种图形用户界面编写的方法流程图;如图2为本发明实施例1一种图形用户界面编写的方法中解析构建示意图;
100.在步骤s101中,采用json文本作为图形用户界面的编写规范;
101.读取json文本后校验其文本的合规性,若json文本错误或包含未指定的组件名称,程序会直接停止执行并给出错误原因提示。若可以正常读取,则继续向下执行。
102.在步骤s102中,读取所述json文本,在json文本符合规定的前提下,首先创建根组件,然后从外到内依次创建组件对象将所述将所述json文本解析为中间数据结构。
103.在图2中,采用解析器依次解析其内容并转换为具体的数据结构描述。
104.创建虚拟的根组件,并赋值为空;
105.从json文件最外层开始解析,如果最外层为对象类型,则根组件创建子组件列表;如果最外层为数组类型,则首先获取数组长度,并创造指定长度的子组件列表;
106.根据json文件中键值创建相应的对象类型,在所述对象类型创建成功后,将所述对象类型添加到所述子组件列表中;
107.读取键值对应的value的相关属性值,直到解析完整个json文本生成中间数据结
构。
108.详细的解析过程为:
109.(1)解析器首先会创建一个虚拟的根rootwidget对象。初始创建的rootwidget对象的子组件列表不会被创建,而是被赋值为none(python中被表示为none,java中被表示为null)。
110.(2)解析器解析json文件最外层,如果最外层为对象类型,rootwidget会创建长度为1子组件列表;如果最外层为数组类型,会先获数组长度,并创建指定长度的组件列表。
111.(3)解析器根据json中key值创建对应的对象类型,如key为“button”会创建buttonwidget对象;key为“input”会创建inputwidget对象。创建成功的对象依次添加到rootwidget的子列表中。每个对象的子组件列表默认都为none,只有在确定其确实包含子组件时才会按照4)中规则创建。
112.(4)解析器读取对应key中value的“sub-list”值,如果不包含该值,则不处理。如果包含该值,就按照2)中规则创建组件列表。
113.(5)解析器读取key对应value中的“style”属性值,并将在转换为css格式字符串保存到对象的style属性中。
114.(6)解析器读取key对应value中的其他属性值并依次将其赋值给具体对象属性。如果该对象没有定义该属性,则直接异常并停止执行。
115.(7)递归执行(2)、(3)、(4)、(5)和(6)过程,直到解析完整个json文本,最终生成图3所示数据结构。如图3为本发明实施例1一种图形用户界面编写的方法中组件数据结构描述示意图;
116.在解析的过程需要注意:
117.第一,所有组件都继承自顶层组件objectwidget,objectwidget中定义了所有组件的共有属性,如子组件列表等。
118.第二,json文本实际会被转换为对象进行表示,所以要保证json中的key类型为已经被定义的类型,不能是用户任意指定的类型。当解析器解析到未定义类型时会抛出异常并停止执行。
119.第三,组件具体对应类型必须通过key进行指定,key不区分大小写,都可以被正常解析。如按钮的key被表示为“button”;输入框的key被表示为“input”;多行文本的key被表示为“text”。
120.第四,解析组件时的key值会被转换为对象中对应属性进行保存。每个组件都有自己特有的属性和公共属性,如用户定义的属性不存在则直接错误并退出。若用户没有指定属性值,会使用已经定义的默认值。
121.第五,组件样式在json中可以使用css方式设置(层叠样式表),最终后将其整理后保存为对象属性值。子组件样式如果没有单独设置,默认会继承父组件样式。
122.第六,如果组件中包含了其他组件,那么这些互不包含的组件会按照解析顺序依次存储到列表中
123.第七,数据结构描述默认会创建一个最顶层rootwidget对象,rootwidget也是objectwidget的子类,但是rootwidget在通过构建器转换为实际组件时不会被实际构建,其功能只是为了防止顶层对象本身为列表的情况。
124.在步骤s103中,在所述中间数据结构解析完成后,从根组件对象开始依次将json文本中对象类型转换为相应语言中对应组件类型,并最终按照父子结构转换为相应代码。
125.数据结构描述创建成功后,程序会触发其内置构建器执行。构建器从顶层根组件(rootwidget)对象开始依次将描述中的对象类型转换为具体语言中对应组件类型,并最终按照父子结构将其转换为具体代码实现。
126.构建器实现的过程包括:
127.(1):根据使用的语言环境,创建项目工程、配置文件等信息,生成项目启动环境。
128.(2):获取解析器解析封装的数据结构,获取rootwidget的子组件列表并将列表中对象转换为实际语言环境下的对象值,如buttonwidget在pyqt5中会被转换为qbutton对象,在javafx中会被转换为button对象;inputwidget在pyqt5中会被转换为qlineedit,在javafx中默认会被转换为textfield,根据“value-type”的不同,可能会被转换为passwordfield。
129.(3):读取数据结构中对象的属性值,并将其设置为实际对象类型的属性值。
130.(4):读取css的字符串值,并为对象设置样式。
131.(5):递归执行(2)、(3)和(4)过程,直到组件列表为none时停止。
132.本发明实施例3提出的一种图形用户界面编写的设备,使用json作为编写语句可以简化gui界面的编写方式。通过json将其转换为不同语言实现,可以方便对界面内容的统一管理,同时实现一次编写,转换为不同语言实现的便利性。。
133.需要说明:本发明技术方案还提供了一种电子设备,包括:通信接口,能够与其它设备比如网络设备等进行信息交互;处理器,与通信接口连接,以实现与其它设备进行信息交互,用于运行计算机程序时,执行上述一个或多个技术方案提供的一种图形用户界面编写的方法,而所述计算机程序存储在存储器上。当然,实际应用时,电子设备中的各个组件通过总线系统耦合在一起。可理解,总线系统用于实现这些组件之间的连接通信。总线系统除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。本技术实施例中的存储器用于存储各种类型的数据以支持电子设备的操作。这些数据的示例包括:用于在电子设备上操作的任何计算机程序。可以理解,存储器可以是易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(rom,read only memory)、可编程只读存储器(prom,programmable read-only memory)、可擦除可编程只读存储器(eprom,erasable programmable read-only memory)、电可擦除可编程只读存储器(eeprom,electrically erasable programmable read-only memory)、磁性随机存取存储器(fram,ferromagnetic random access memory)、快闪存储器(flash memory)、磁表面存储器、光盘、或只读光盘(cd-rom,compact disc read-only memory);磁表面存储器可以是磁盘存储器或磁带存储器。易失性存储器可以是随机存取存储器(ram,random accessmemory),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram可用,例如静态随机存取存储器(sram,static random access memory)、同步静态随机存取存储器(ssram,synchronous static random access memory)、动态随机存取存储器(dram,dynamic random access memory)、同步动态随机存取存储器(sdram,synchronousdynamic random access memory)、双倍数据速率同步动态随机存取存储器(ddrsdram,double data rate synchronous dynamic random access memory)、增强型同
步动态随机存取存储器(esdram,enhanced synchronous dynamic random access memory)、同步连接动态随机存取存储器(sldram,synclink dynamic random access memory)、直接内存总线随机存取存储器(drram,direct rambus random access memory)。本技术实施例描述的存储器旨在包括但不限于这些和任意其它适合类型的存储器。上述本技术实施例揭示的方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器、dsp(digital signal processing,即指能够实现数字信号处理技术的芯片),或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理器可以实现或者执行本技术实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。结合本技术实施例所公开的方法的步骤,可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于存储介质中,该存储介质位于存储器,处理器读取存储器中的程序,结合其硬件完成前述方法的步骤。处理器执行所述程序时实现本技术实施例的各个方法中的相应流程,为了简洁,在此不再赘述。
134.实施例4
135.本发明还提出了一种可读存储介质,可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现方法步骤如下:
136.如图1为本发明实施例1一种图形用户界面编写的方法流程图;如图2为本发明实施例1一种图形用户界面编写的方法中解析构建示意图;
137.在步骤s101中,采用json文本作为图形用户界面的编写规范;
138.读取json文本后校验其文本的合规性,若json文本错误或包含未指定的组件名称,程序会直接停止执行并给出错误原因提示。若可以正常读取,则继续向下执行。
139.在步骤s102中,读取所述json文本,在json文本符合规定的前提下,首先创建根组件,然后从外到内依次创建组件对象将所述将所述json文本解析为中间数据结构。
140.在图2中,采用解析器依次解析其内容并转换为具体的数据结构描述。
141.创建虚拟的根组件,并赋值为空;
142.从json文件最外层开始解析,如果最外层为对象类型,则根组件创建子组件列表;如果最外层为数组类型,则首先获取数组长度,并创造指定长度的子组件列表;
143.根据json文件中键值创建相应的对象类型,在所述对象类型创建成功后,将所述对象类型添加到所述子组件列表中;
144.读取键值对应的value的相关属性值,直到解析完整个json文本生成中间数据结构。
145.详细的解析过程为:
146.(1)解析器首先会创建一个虚拟的根rootwidget对象。初始创建的rootwidget对象的子组件列表不会被创建,而是被赋值为none(python中被表示为none,java中被表示为null)。
147.(2)解析器解析json文件最外层,如果最外层为对象类型,rootwidget会创建长度为1子组件列表;如果最外层为数组类型,会先获数组长度,并创建指定长度的组件列表。
148.(3)解析器根据json中key值创建对应的对象类型,如key为“button”会创建buttonwidget对象;key为“input”会创建inputwidget对象。创建成功的对象依次添加到rootwidget的子列表中。每个对象的子组件列表默认都为none,只有在确定其确实包含子组件时才会按照4)中规则创建。
149.(4)解析器读取对应key中value的“sub-list”值,如果不包含该值,则不处理。如果包含该值,就按照2)中规则创建组件列表。
150.(5)解析器读取key对应value中的“style”属性值,并将在转换为css格式字符串保存到对象的style属性中。
151.(6)解析器读取key对应value中的其他属性值并依次将其赋值给具体对象属性。如果该对象没有定义该属性,则直接异常并停止执行。
152.(7)递归执行(2)、(3)、(4)、(5)和(6)过程,直到解析完整个json文本,最终生成图3所示数据结构。如图3为本发明实施例1一种图形用户界面编写的方法中组件数据结构描述示意图;
153.在解析的过程需要注意:
154.第一,所有组件都继承自顶层组件objectwidget,objectwidget中定义了所有组件的共有属性,如子组件列表等。
155.第二,json文本实际会被转换为对象进行表示,所以要保证json中的key类型为已经被定义的类型,不能是用户任意指定的类型。当解析器解析到未定义类型时会抛出异常并停止执行。
156.第三,组件具体对应类型必须通过key进行指定,key不区分大小写,都可以被正常解析。如按钮的key被表示为“button”;输入框的key被表示为“input”;多行文本的key被表示为“text”。
157.第四,解析组件时的key值会被转换为对象中对应属性进行保存。每个组件都有自己特有的属性和公共属性,如用户定义的属性不存在则直接错误并退出。若用户没有指定属性值,会使用已经定义的默认值。
158.第五,组件样式在json中可以使用css方式设置(层叠样式表),最终后将其整理后保存为对象属性值。子组件样式如果没有单独设置,默认会继承父组件样式。
159.第六,如果组件中包含了其他组件,那么这些互不包含的组件会按照解析顺序依次存储到列表中
160.第七,数据结构描述默认会创建一个最顶层rootwidget对象,rootwidget也是objectwidget的子类,但是rootwidget在通过构建器转换为实际组件时不会被实际构建,其功能只是为了防止顶层对象本身为列表的情况。
161.在步骤s103中,在所述中间数据结构解析完成后,从根组件对象开始依次将json文本中对象类型转换为相应语言中对应组件类型,并最终按照父子结构转换为相应代码。
162.数据结构描述创建成功后,程序会触发其内置构建器执行。构建器从顶层根组件(rootwidget)对象开始依次将描述中的对象类型转换为具体语言中对应组件类型,并最终按照父子结构将其转换为具体代码实现。
163.构建器实现的过程包括:
164.(1):根据使用的语言环境,创建项目工程、配置文件等信息,生成项目启动环境。
165.(2):获取解析器解析封装的数据结构,获取rootwidget的子组件列表并将列表中对象转换为实际语言环境下的对象值,如buttonwidget在pyqt5中会被转换为qbutton对象,在javafx中会被转换为button对象;inputwidget在pyqt5中会被转换为qlineedit,在javafx中默认会被转换为textfield,根据“value-type”的不同,可能会被转换为passwordfield。
166.(3):读取数据结构中对象的属性值,并将其设置为实际对象类型的属性值。
167.(4):读取css的字符串值,并为对象设置样式。
168.(5):递归执行(2)、(3)和(4)过程,直到组件列表为none时停止。
169.本发明实施例4提出的一种图形用户界面编写的存储介质,使用json作为编写语句可以简化gui界面的编写方式。通过json将其转换为不同语言实现,可以方便对界面内容的统一管理,同时实现一次编写,转换为不同语言实现的便利性。
170.本技术实施例还提供了一种存储介质,即计算机存储介质,具体为计算机可读存储介质,例如包括存储计算机程序的存储器,上述计算机程序可由处理器执行,以完成前述方法所述步骤。计算机可读存储介质可以是fram、rom、prom、eprom、eeprom、flash memory、磁表面存储器、光盘、或cd-rom等存储器。
171.本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。或者,本技术上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台电子设备(可以是个人计算机、服务器、或者网络设备等)执行本技术各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。
172.本技术实施例提供的一种图形用户界面编写的处理设备和存储介质中相关部分的说明可以参见本技术实施例1提供的一种图形用户界面编写的方法中对应部分的详细说明,在此不再赘述。
173.需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。另外,本技术实施例提供的上述技术方案中与现有技术中对应技术方案实现原理一致的部分并未详细说明,以免过多赘述。
174.上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制。对于所属领域的技术人员来说,在上述说明的基础上还可以做出其它不同形式的修改或变形。这里无需也无法对所有的实施方式予以穷举。在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护
范围以内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1