我一直听到这个词在几个不同的背景下被抛出.它是什么?
请列出允许快速编写GUI应用程序的GUI编程库,工具包,框架.我的意思是这样的
正如答案所暗示的那样,这可以定义为声明性 GUI编程,但不一定是这样.任何方法都可以,如果它工作,易于使用和简洁.
有一些像这样的GUI库/工具包.它们列在下面.如果您发现缺少合格工具包,请扩展列表.指出项目是否是跨平台,成熟,活跃,并尽可能提供示例.
请使用此wiki 仅讨论开源项目.
这是到目前为止的列表(按字母顺序排列):
Fudgets是一个Haskell库.平台:Unix.状态:实验,但仍保持.一个例子:
import Fudgets
main = fudlogue (shellF "Hello" (labelF "Hello, world!" >+< quitButtonF))
Run Code Online (Sandbox Code Playgroud)
(来源:picamatic.com)
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的GUI(HTML + JS).跨平台,成熟.可以完全在客户端使用.
寻找一个不错的"helloworld"示例.
(来源:picamatic.com)
JavaFX可用于独立(桌面)应用程序以及Web应用程序.不完全跨平台,尚未完全开源.状态:1.0发布.一个例子:
Frame {
content: Button {
text: …
Run Code Online (Sandbox Code Playgroud) 我想知道在Java中是否有任何关于声明性GUI编程的建议.(我厌恶基于视觉的GUI创建者/编辑器软件,但我对手动实例化JPanels和Boxes以及JLabel和JLists等感到有些厌倦)
这是我的整体问题,但对于我正在考虑的方法,我有两个具体的问题:
JavaFX:JavaFX中是否有一个真实GUI显示的示例(例如,不是圆形和矩形,但是列表框和按钮以及标签等),它可以与访问和更新各种元素的Java源文件连接?
简单的旧Swing有一些东西要解析XUL-ish XML:有没有人发明过一种用于Java的声明性语法(如XUL)用于Java Swing?我想,要创建一些基于STaX的代码来创建一些代码,实例化Swing元素的层次结构,并通过某种对象模型访问层次结构,我认为这并不难.但我宁愿使用一些众所周知,记录和测试的东西,而不是试图自己发明这样的东西.
JGoodies表格 - 不完全是声明性的,但有点接近我和JGoodies Binding有好运.但他们的表单布局的语法似乎有点神秘.
编辑:这里有很多很棒的答案!(我在上面添加了#3)我特别感谢您在使用其中一个框架进行实际应用时获得的任何经验.
ps我尝试了一些谷歌搜索("java gui declarative"),只是不太清楚要找什么.
在建筑方面,我认为WPF非常棒.一般来说,我是底层渲染/动画内部工作的忠实粉丝.模板和造型设置的灵活性令人印象深刻.
但是我讨厌XAML - 我觉得它让很多事情变得复杂.我已经在大型和小型应用程序中使用它,我发现自己多次试图弄清楚如何在XAML中做一些基本原理是基本但语法古怪的东西.不仅如此,我多次想知道解析/绑定的某些部分有多重.(我知道它已编译,但我不确定在运行时仍有多少评估)
XAML只是构建和加载可视化树的一种方式.是否有任何框架可以简化以非XML,基于代码(但仍然主要是声明性)的方式构建可视树?具体来说,我对在保留MVVM方法的同时缓解以下任何问题的框架感兴趣:
强类型绑定.指定ViewModel必须符合特定类型.我假设BaseBinding在引擎盖下使用反射,我对它的速度有点怀疑,更不用说破坏的绑定令人讨厌.
结合更快,不INotifyPropertyChanged
具有约束力.似乎BindableProperty<T>
可以创建某种类型,绑定可以直接监听,而不是接收所有ViewModel属性更改.使用直接回调与字符串参数似乎也是有利的.
一种不同的资源管理方法; 再次,强类型字典可能是相当不错的.我几乎希望将样式视为lambdas或者某种东西来捕捉强烈类型的方面.
总之,任何基于非XAML的框架都适合MVVM,并且是强类型的?
我是一个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__
,我应该不再担心吗?
有一个更好的方法吗?
谢谢!
sqlautocode - 存在多对多关系的问题
sqlsoup - 不支持关系
elixir - 它注意自动生成
还有什么我可以尝试的吗?
我想从这个字符串数组中获取
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
一个阵列,所以不行.
有任何想法吗?
我们需要创建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")可能在不同的连接上使用,所以我们不能定义它一次并保持它.
关于如何实现这一点的任何建议将不胜感激.
谢谢...
我想这样做:
<asp:HyperLink NavigateUrl='<%= WebContext.RootUrl %><%= WebContext.CurrentUser.UserName %>' runat="server" Text='<%= GetProfileImage(WebContext.CurrentUser.AccountId) %>'></asp:HyperLink>
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
这不是scriptlet.将以纯文本格式输出.
当我把鼠标放在我的声明性陈述上时.
有任何想法吗?谢谢.
我上课了:
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)
添加标签时: …