kivy语言繁琐,背后的理由

时间:2015-05-04 05:20:01

标签: python qt user-interface kivy

Kivy有这个kv language来定义UI,定义文件会变得非常复杂,github上有一个kv设计器包可以自动生成kv文件,但是非常错误和不可靠。所以问题是为什么kivy希望程序员手动编写那些UI定义,甚至硬编码UI小部件的位置和维度。像QT,VB等大多数其他库都有一个UI设计器作为核心功能,但Kivy没有从它开始并期望程序员对它进行硬编码,我觉得它很麻烦,虽然我觉得我错过了什么。或者只是我找到了kv语言的陡峭学习曲线,而且我不知道一些有助于编写kv文件的工具。

2 个答案:

答案 0 :(得分:3)

如果您问为什么Kivy不是围绕GUI界面构建器设计的:

design philosophy doc中,他们暗示了原因:

  

Kivy很专注。您可以使用几行代码编写一个简单的应用程序。 Kivy程序是使用Python编程语言创建的,这种语言非常灵活,功能强大且易于使用。此外,我们创建了自己的描述语言Kivy Language,用于创建复杂的用户界面。该语言允许您快速设置,连接和排列应用程序元素。我们认为让您专注于应用程序的本质比强迫您使用编译器设置更重要。我们把这种负担从肩膀上拉下来。

这非常强烈地表明他们认为使GUI应用程序不那么繁琐的方式是一种文本驱动的声明式设计,如kv语言,而不是WYSIWYG界面构建器。所以,这就是他们以这种方式做事的原因。

但他们为什么会这么想?好吧,这里的事情变得主观。

你显然不同意他们的看法。 Apple也没有。也许微软没有。但这肯定是其他人都追随的趋势。人们已经从使用图形HTML设计器转向直接在HTML和JS代码中使用声明和程序设计的组合。 Macromedia创建了Flex,允许人们创建Flash应用程序而无需使用Flash Designer。各种跨平台的GUI框架(Gtk +,wx,Tk,JUCE等)要么没有接口构建器,要么将其作为可选的“stepchild”工具;唯一的例外是Qt,它在4.0之前没有得到一个紧密集成的设计师。

看看Xcode和Visual Studio需要做多少工作,以及Apple和Microsoft必须构建的所有额外复杂功能(请记住,两家公司基本上接管并重新编写了一种编程语言,只是为了与他们合作界面构建器,因为现有的主流语言不适合)。 Kivy可能是一个商业资助的项目,但他们没有无限的资源,并且可能他们认为他们花在做Cocoa和Xcode之类的事情上的努力可能会更好地花在其他地方。

关于为什么他们使用基于静态像素的布局(如VB或wx)而非相对布局(如Cocoa或Qt)的问题......首先,它是要求它,它给出了你是选项。这两者都有优势,但是当你试图让设计在320x480屏幕上看起来很好的应用程序时,当每个人都注意到HTML和其他工具设计为“可扩展到任何大小”时实际缩放到那些尺寸,我可以看到像素完美布局的优势赢得了。 (请注意,HTML / CSS同样为您提供了两种选择。最早制作移动页面的网站利用了像素布局CSS,但随着人们研究如何使“可缩放”和“小”一起工作,它们逐渐发展,随着移动屏幕变得越来越多变。)

答案 1 :(得分:2)

  

甚至硬编码UI小部件的位置和尺寸。

您不必对UI小部件的位置和尺寸进行硬编码。虽然你可以这样做,但这通常不是最好的主意,因为你可能正在思考的原因很明显。

您可能缺少的是布局类的作用,它会对其子窗口小部件施加一些顺序。例如,BoxLayout将其所有子项堆叠在水平或垂直行中,以便它们一起填充其区域,相对大小由其size_hint属性确定。使用此布局和其他布局,您不必指定手动大小,一切都将自动适应窗口大小或单个小部件大小的变化。

至于为何我们如此使用kv,abarnert的回答和讨论很好地涵盖了哲学和核心原因。也就是说,我们并不反对使用图形工具,但没有一个核心开发人员投入其中。 Kivy Designer是一个早期的项目来制作这样的东西,因为它是一个受欢迎的请求,但由于贡献很少,开发一直很慢 - 而且我想维护一个gui构建器可能比解析像kv这样的简单语言更难。我们今年确实有一个GSoC项目,希望它能够带来更有用的状态,吸引更多的兴趣。