标签: declarative

什么是声明性编程?

我一直听到这个词在几个不同的背景下被抛出.它是什么?

glossary programming-languages declarative

186
推荐指数
12
解决办法
10万
查看次数

非常简单,简洁易用的GUI编程"框架"

请列出允许快速编写GUI应用程序的GUI编程库,工具包,框架.我的意思是这样的

  • GUI完全以人类可读(和人类可写)的纯文本文件(代码)描述
  • 代码简洁(每个小部件/事件对有1或2行代码),适合脚本编写
  • 从代码中可以看出GUI的结构和操作(小部件和事件流的嵌套)
  • 隐藏有关如何构建GUI的详细信息(如mainloop,附加事件侦听器等)
  • 支持自动布局(vbox,hbox等)

正如答案所暗示的那样,这可以定义为声明性 GUI编程,但不一定是这样.任何方法都可以,如果它工作,易于使用和简洁.

有一些像这样的GUI库/工具包.它们列在下面.如果您发现缺少合格工具包,请扩展列表.指出项目是否是跨平台,成熟,活跃,并尽可能提供示例.

请使用此wiki 讨论开源项目.

这是到目前为止的列表(按字母顺序排列):

Fudgets

Fudgets是一个Haskell库.平台:Unix.状态:实验,但仍保持.一个例子:

  import Fudgets
  main = fudlogue (shellF "Hello" (labelF "Hello, world!" >+< quitButtonF))
Run Code Online (Sandbox Code Playgroud)

Fudgets示例截图
(来源:picamatic.com)

GNUstep文艺复兴

Renaissance允许用简单的XML描述GUI.平台:OSX/GNUstep.状态:GNUstep的一部分.以下示例:

<window title="Example">
  <vbox>
    <label font="big">
      Click the button below to quit the application
    </label>
    <button title="Quit" action="terminate:"/>
  </vbox>
</window> 
Run Code Online (Sandbox Code Playgroud)

文艺复兴时期的例子截图
(来源:picamatic.com)

HTML

基于HTML的GUI(HTML + JS).跨平台,成熟.可以完全在客户端使用.

寻找一个不错的"helloworld"示例.

HTML GUI示例
(来源:picamatic.com)

JavaFX的

JavaFX可用于独立(桌面)应用程序以及Web应用程序.不完全跨平台,尚未完全开源.状态:1.0发布.一个例子:

  Frame {
    content: Button {
      text: …
Run Code Online (Sandbox Code Playgroud)

scripting user-interface open-source declarative

60
推荐指数
3
解决办法
2万
查看次数

Java中声明性GUI编程的建议

我想知道在Java中是否有任何关于声明性GUI编程的建议.(我厌恶基于视觉的GUI创建者/编辑器软件,但我对手动实例化JPanels和Boxes以及JLabel和JLists等感到有些厌倦)

这是我的整体问题,但对于我正在考虑的方法,我有两个具体的问题:

  1. JavaFX:JavaFX中是否有一个真实GUI显示的示例(例如,不是圆形和矩形,但是列表框和按钮以及标签等),它可以与访问和更新各种元素的Java源文件连接?

  2. 简单的旧Swing有一些东西要解析XUL-ish XML:有没有人发明过一种用于Java的声明性语法(如XUL)用于Java Swing?我想,要创建一些基于STaX的代码来创建一些代码,实例化Swing元素的层次结构,并通过某种对象模型访问层次结构,我认为这并不难.但我宁愿使用一些众所周知,记录和测试的东西,而不是试图自己发明这样的东西.

  3. JGoodies表格 - 不完全是声明性的,但有点接近我和JGoodies Binding有好运.但他们的表单布局的语法似乎有点神秘.

编辑:这里有很多很棒的答案!(我在上面添加了#3)我特别感谢您在使用其中一个框架进行实际应用时获得的任何经验.

ps我尝试了一些谷歌搜索("java gui declarative"),只是不太清楚要找什么.

java layout user-interface swing declarative

55
推荐指数
5
解决办法
8288
查看次数

没有XAML的WPF

在建筑方面,我认为WPF非常棒.一般来说,我是底层渲染/动画内部工作的忠实粉丝.模板和造型设置的灵活性令人印象深刻.

但是我讨厌XAML - 我觉得它让很多事情变得复杂.我已经在大型和小型应用程序中使用它,我发现自己多次试图弄清楚如何在XAML中做一些基本原理是基本但语法古怪的东西.不仅如此,我多次想知道解析/绑定的某些部分有多重.(我知道它已编译,但我不确定在运行时仍有多少评估)

XAML只是构建和加载可视化树的一种方式.是否有任何框架可以简化以非XML,基于代码(但仍然主要是声明性)的方式构建可视树?具体来说,我对在保留MVVM方法的同时缓解以下任何问题的框架感兴趣:

  1. 强类型绑定.指定ViewModel必须符合特定类型.我假设BaseBinding在引擎盖下使用反射,我对它的速度有点怀疑,更不用说破坏的绑定令人讨厌.

  2. 结合更快,不INotifyPropertyChanged具有约束力.似乎BindableProperty<T>可以创建某种类型,绑定可以直接监听,而不是接收所有ViewModel属性更改.使用直接回调与字符串参数似乎也是有利的.

  3. 一种不同的资源管理方法; 再次,强类型字典可能是相当不错的.我几乎希望将样式视为lambdas或者某种东西来捕捉强烈类型的方面.

总之,任何基于非XAML的框架都适合MVVM,并且是强类型的?

wpf xaml declarative mvvm

46
推荐指数
4
解决办法
8972
查看次数

SQLAlchemy:使用声明式更新的更好方法?

我是一个SQLAlchemy noob.

假设我在声明模式下有一个用户表:

class User(Base):
    __tablename__ = 'user'
    id = Column(u'id', Integer(), primary_key=True)
    name = Column(u'name', String(50))
Run Code Online (Sandbox Code Playgroud)

当我知道用户的id没有加载到会话中的对象时,我更新这样的用户:

ex = update(User.__table__).where(User.id==123).values(name=u"Bob Marley")
Session.execute(ex)
Run Code Online (Sandbox Code Playgroud)

我不喜欢使用User.__table__,我应该不再担心吗?

有一个更好的方法吗?

谢谢!

python sqlalchemy declarative

45
推荐指数
2
解决办法
4万
查看次数

如何自动将数据库反映到sqlalchemy声明中?

sqlautocode - 存在多对多关系的问题

sqlsoup - 不支持关系

elixir - 它注意自动生成

还有什么我可以尝试的吗?

python sqlalchemy declarative auto-generate

34
推荐指数
3
解决办法
3万
查看次数

是否有将Array转换为Dictionary的声明方法?

我想从这个字符串数组中获取

let entries = ["x=5", "y=7", "z=10"]
Run Code Online (Sandbox Code Playgroud)

对此

let keyValuePairs = ["x" : "5", "y" : "7", "z" : "10"]
Run Code Online (Sandbox Code Playgroud)

我试图使用,map但问题似乎是字典中的键值对不是一个独特的类型,它只是在我的脑海中,但不是在字典类型,所以我无法真正提供转换函数,因为有什么都没有改变.再加上map一个阵列,所以不行.

有任何想法吗?

declarative swift

31
推荐指数
3
解决办法
2万
查看次数

SQLAlchemy中的动态类创建

我们需要创建SQLAlchemy类来访问多个外部数据源,这些数据源的数量会随着时间的推移而增加.我们为我们的核心ORM模型使用声明性基础,我知道我们可以使用autoload = True手动指定新的ORM类来自动生成映射.

问题是我们需要能够动态生成它们,如下所示:

from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()

stored={}
stored['tablename']='my_internal_table_name'
stored['objectname']='MyObject'
Run Code Online (Sandbox Code Playgroud)

并动态地将它变成这样的东西:

class MyObject(Base):
    __tablename__ = 'my_internal_table_name'
    __table_args__ = {'autoload':True}
Run Code Online (Sandbox Code Playgroud)

我们不希望类持续时间超过打开连接,执行查询,然后关闭连接所需的时间.因此,理想情况下,我们可以将上面"存储"变量中的项目放入数据库中,并根据需要提取它们.另一个挑战是对象名称(例如"MyObject")可能在不同的连接上使用,所以我们不能定义它一次并保持它.

关于如何实现这一点的任何建议将不胜感激.

谢谢...

python sqlalchemy metaprogramming metaclass declarative

21
推荐指数
1
解决办法
5702
查看次数

在asp:超链接中分配声明性值的问题.错误:这不是scriptlet.将以纯文本格式输出

我想这样做:

<asp:HyperLink NavigateUrl='<%= WebContext.RootUrl %><%= WebContext.CurrentUser.UserName %>' runat="server" Text='<%= GetProfileImage(WebContext.CurrentUser.AccountId) %>'></asp:HyperLink> 
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

这不是scriptlet.将以纯文本格式输出.

当我把鼠标放在我的声明性陈述上时.

有任何想法吗?谢谢.

asp.net declarative hyperlink

19
推荐指数
3
解决办法
2万
查看次数

如果存在唯一键,则SQLAlchemy更新

我上课了:

class Tag(Base, TimestampMixin):
    """Tags"""
    __tablename__ = 'tags'
    __table_args__ = {'mysql_engine' : 'InnoDB', 'mysql_charset' : 'utf8' }

    id = Column(Integer(11), autoincrement = True, primary_key = True)
    tag = Column(String(32), nullable = False, unique = True)
    cnt = Column(Integer(11), index = True, nullable = False, default = 1)

    def __init__(self, tag):
        t = session.query(Tag).filter_by(tag=tag).first()
        if t:
            self.cnt = t.cnt+1
            self.tag = t.tag
        else:
            self.tag = tag

    def __repr__(self):
        return "<Tag('%s')>" % (self.tag, )

    def __unicode__(self):
        return "%s" % (self.tag, )
Run Code Online (Sandbox Code Playgroud)

添加标签时: …

python orm sqlalchemy declarative

18
推荐指数
2
解决办法
2万
查看次数