为什么没有类似CSS的GUI创建工具?

34

好的,这可能会被关闭或者别的什么,我不在意。我必须说这个因为它让我非常烦恼。

从html/css/php背景出发进入应用程序开发的深处。我徘徊于Java的山谷并探索C#的奥秘。我惊叹于Ruby的美丽,倒在Bash的顽固简单性上,并时不时地回来拜访我的老朋友HTML、CSS和PHP。

直到我有了在Java中创建桌面应用程序的任务,我才震惊于为使应用程序在外观和感觉上更加用户友好而必须经历的痛苦和折磨。

我陷入了LayoutManagers、Docking参数以及java.swing和其伙伴们之外的任何恶劣生物的噩梦之中。

此时,我感到自己的头脑中孕育着一个想法。正如科布所说:最具弹性的寄生虫是什么?细菌?病毒?肠道蠕虫?一个想法。具有弹性……高度传染性。一旦一个想法在大脑中生根发芽,几乎不可能根除。一个完全形成-完全理解-黏在那里的想法。 - 你知道的,那种想法。

我在想,为什么它不能像我的好哥们CSS一样容易。如此布局,使用边距、边框、浮动等等。

现代Web应用程序完全是用纯粹、简单、易于理解的CSS设计的。如果我想要相同的东西用于我的桌面应用程序,我是不是疯了?随着我写这篇文章,两者之间的差距越来越小。有些Web页比大多数业余程序员一生中编写的任何东西都要复杂得多。

我就是不明白GUI创建为什么会变得如此麻烦。可能只是因为我来自不同的背景,并习惯于类似CSS的样式,所以只有我觉得这样,但是;

没有人想过这个问题吗?创建一个CSS解析器以使用与Web开发相同的方法来设计GUI难道很难吗?类、ID、选择器等等。这到底有什么难度呢?

有没有人和我一样有同样的感受呢?

还是(这会很尴尬)这样的工具已经存在,只是我太蠢找不到了?


我正在使用Visual Studio,它还不错,但是一旦你尝试创建一些在调整大小等方面具有灵活性的复杂布局,它就会遇到与其他任何GUI设计器相同的问题。 - F.P
7
StackOverflow不是博客。请重新撰写您的帖子,提出一个明确的问题,可以明确回答。 - user113292
你不会真正得到更好的。 - MUG4N
只是为了记录,GTK+ 3计划使用CSS来进行主题和小部件的样式设计。 - heltonbiker
2
我喜欢你提问的方式! - muffin
显示剩余5条评论
7个回答

13

微软的.NET的WPF(Windows Presentation Foundation)是一种类似于HTML + CSS的图形用户界面创建解决方案。

我个人认为它比HTML更加灵活,但使用起来仍然很容易(可以创建易读的GUI代码)。

定义布局就像这样简单:

<DockPanel>
    <Label Content="Dock Panel Layout Demo" 
    FontSize="15" FontWeight="Bold" Background="LightBlue"
    Foreground="Blue" DockPanel.Dock="Top"/>

    <Label Content="Footer" FontSize="15" FontWeight="Bold" 
           Background="LightGray"
           DockPanel.Dock="Bottom" />

    <Label Content="Left Pane" FontSize="15" FontWeight="Bold"
           Width="125" Background="Firebrick"
           DockPanel.Dock="Left"/>

   <Label Content="Content Pane" FontSize="15" FontWeight="Bold"
           Width="255"
           Background="Beige"/>

    <Label Content="Right Pane" FontSize="15" FontWeight="Bold"
           Width="125" Background="Khaki"
           DockPanel.Dock="Right"/>
</DockPanel>

还有样式:

<Window.Resources>
    <Style x:Key="myStyle" TargetType="Button">
       <Setter Property="Background" Value="Orange" />
       <Setter Property="FontStyle" Value="Italic" />
       <Setter Property="Padding" Value="8,4" />
       <Setter Property="Margin" Value="4" />
    </Style>
</Window.Resources>

我知道WPF,但我认为我没有清楚地表达我的意思;我想要一种使用无设计师的方式来设计GUI。我希望完全控制GUI的外观,而不必使用拖放式设计师。没有人使用设计师创建HTML/CSS布局,为什么桌面程序员要这样做呢? - F.P
6
我在编写WPF的XAML代码时没有使用设计师。我认为手写代码比使用设计师更快。这就是让我喜欢WPF的原因 - Visual Studio的WinForms设计文件有时会崩溃,迫使我使用备份。但是在WPF中没有这样的风险。 - Matěj Zábský
你可以手写XAML,完全不必使用设计师。 - Ikke
1
@doc: XML对于人类和机器来说都很容易阅读,还有什么更好的呢?是的,它非常冗长,但这是为了保持可读性和多功能性而必要的。 - Matěj Zábský
1
@commanderz“XML对人和机器来说都很容易阅读”——除非你开始使用XSL、XQuery、XPath、WSDL…这时机器得分4:0。你可以称我为种族主义者,但为什么要考虑机器呢?该死的机器是为我们工作而存在的!XML擅长保留分层数据,其他方面就不行了。创建像DockPanel.Dock=Left这样的间接引用就是滥用这种格式。 - mip
显示剩余4条评论

12

1
XUL甚至可以与XULRunner一起用于独立应用程序。 - slikts
2
所以,你看。XULRunner == 独立的“基于 Web”的应用程序。 - adib

8
在Qt应用程序中,您可以使用类似CSS的语法,称为QSS。下一个版本还将具有名为QML的“声明性UI”。
WPF和Silverlight也使用基于XML的声明性语言来创建其UI,称为XAML。

7

"纯净、简单、易用的CSS"

我怀疑你是否曾经开发过跨浏览器、可访问性、浏览器无关的网站或应用程序。

事实比你想象的更加痛苦。

如果我能永远不再使用"盒模型hack",我将感激不尽。


1
你真的抓住了重点 ;) - MUG4N
@ApoY2k - 这可能是正确的,但如果没有人以相同的方式解释标准,那么制定标准的意义在哪里呢?虽然说这是一个无声的观点,但实际上我们最终会为每种口味提供服务。我理解闪存从哪里获得了它的市场份额。 - Jonathan
2
@ApoY2k:我记得当我试图实现一些效果时,即使CSS正常工作,也会感到非常困难。 CSS很擅长定义某些元素的外观,但是当涉及布局时,CSS确实是一个非常差的工具。我很惊讶这个问题的提问者想在GUI应用程序中使用CSS进行布局,而我愿意将GUI布局技术引入到Web世界中。 - mip

7

一切都是看待问题的角度。我已经从事桌面应用程序开发几十年了。我认为CSS绝对是糟糕透顶的。它非常难以创建一个合理的布局,而真正的交互则更加困难。这只是我的个人观点。

现在,我主要使用tcl/tk和python/wxpython来进行GUI开发,这使得GUI开发变得相当容易。我可以理解,如果你第一次尝试桌面GUI编程是使用Java,你会得出你所得出的结论。我不希望任何人都去做Java GUI编程。


1
我不明白你为什么如此抨击Swing。它有什么问题吗?以前它可能有点糟糕,但现在看起来好多了。也许它不能带来最佳的用户体验,但在它上面编写代码相当容易。现在除了Java中的AWT和Swing之外,你至少还有SWT和Jambi。但是对于CSS布局批评者来说,我给一个赞(请阅读我上面或下面的帖子)。 - mip
@doc: 举个例子:Swing有八种左右的布局管理器(BorderLayout、BoxLayout、GridBagLayout等),每一种都不同,每一种都有点难用。相比之下,Tk只有三种(只有两种是常用的)。而且用这三种我可以复制Swing能做的任何布局,而且代码行数要少得多。这就是为什么我不喜欢Swing。并不是说你不能用它做很多事情,而是说它需要太多的代码行来完成任何事情。 - Bryan Oakley
我承认,GridBag布局及其约束有点烦人。但在我看来,它仍然比使用CSS构建布局要好。 - mip

4

为什么要费心学习,因为HTML和Javascript很快就会成为编写用户界面应用程序的通用和全面方式^^

此外,我并没有真正使用过WPF,但它似乎涉及一种“声明式”UI构建技术,就像你描述的那样,它扩展到Silverlight和各种微软技术。他们不可能是唯一采用这种方法的人...


不会。Javascript目前已接近其能力的顶峰。 - mip
这并不意味着 Web 应用程序不会越来越发展成为实际的生产工作程序(它们将会)。 - F.P
@doc webassembly - That Realty Programmer Guy
1
@GaretClaborn 是的,WebAssembly是Web浏览器应该开始使用的东西。但我担心像基于Web的VNC这样的简单解决方案现在可能会取代它。 - mip
@doc 是的,现在Web套接字支持非常好,并且很快将无处不在。但我不确定您是如何建议使用VNC服务器来托管传统UI的多用户实例?我希望WebAssembly能够成为客户端执行计算密集型任务的加速器。如果它变得无处不在,我可以看到它很快就会取代JavaScript,因为新语言的垫片将在其之上构建。 - That Realty Programmer Guy

2
如果您对Java没有固定的选择,那么WPF与其XAML是一种您所描述的方法,它将布局与逻辑分离,就像CSS与HTML一样。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接