我目前正在重新与Python合作,并且喜欢它.但是,我发现自己一遍又一遍地遇到一种模式.我一直在想,必须有一种更好的方式来表达我想要的东西,而且我可能是以错误的方式做到这一点.
我正在编写的代码如下:
# foo is a dictionary
if foo.has_key(bar):
foo[bar] += 1
else:
foo[bar] = 1
Run Code Online (Sandbox Code Playgroud)
我在我的程序中写了很多.我的第一反应是推出一个帮助函数,但是python库经常提供这样的东西.
是否有一些我缺少的简单的小语法技巧?或者这是应该做的方式?
我目前正在参与一个主要为Linux开发应用程序的项目(Fedora 10).但是,稍后我们可能需要将这些应用程序移植到Mac OS X和Windows上,我们不希望通过选择错误的GUI工具包来解决这个问题.*
由于各种遗留原因,我们无法使用Java.我们正在决定使用Qt Jambi和SWT进行GUI.我没有太多使用它们的经验所以我正在做一些小型原型试图让它们感觉到.到目前为止(仅在Linux上开发)它们之间没有太大区别.但是,我可以在短时间内进行深度限制.这就是我寻求帮助的原因.
我们感兴趣的特点是:
无框窗户
定制形状的窗户(即不是矩形)
美观
有没有人对这两个可能会让我们以后绊倒的图书馆有任何经验和/或见解?
2月11日更新:感谢您的回答.对于那些好奇的人,我们可能会选择Jambi.主要是样式表功能赢得了我,因为它们使我们需要做的很多自定义小部件形状变得容易.Qt套件的例子表明,无框架,定制形状的窗口确实可以在不同的平台上工作,所以我们不应该被追踪到轨道上.LGPL发布是我们考虑Jambi的原因:)
我正在尝试捕获WPF应用程序中任何位置的按键事件,无论哪个UI元素具有焦点.目前我没有运气.任何人都可以提出一些我可能没试过的策略吗?或者,理想情况下,提供一个答案,例如"哦,这很容易,你只需这样做".
它是一个分布式应用程序,具有聊天系统.我正在寻找的效果是用户可以随时开始输入聊天消息,而无需切换到标准聊天框.我将使用FormattedText对象在应用程序中显示它们的消息.这很重要,因为这意味着应用程序中没有任何文本输入元素.
我的XAML结构看起来大致如下:
<MainWindow>
<Canvas 1>
<Canvas 2>
<Image 1 />
</Canvas 2>
<Image 2 />
</Canvas 1>
</MainWindow>
Run Code Online (Sandbox Code Playgroud)
我以编程方式将元素添加到Canvas 2中,并操纵Image 2,这就是它具有该结构的原因.
我已经尝试将KeyDown,KeyUp和Preview事件添加到MainWindow和Canvas 1,但它们似乎都没有触发(我用断点检查).在阅读了另一个相关问题之后,我也尝试在Loaded()方法中手动设置焦点在主窗口上.
我意识到这个网站上有很多相关的问题,但他们没有帮助我,因为:
感谢您抽出宝贵时间阅读我冗长的帖子,并感谢您的建议.
更新(在Rachel评论之后)当我放入TextBox并将焦点设置为TextBox时,将触发MainWindow级别的键事件方法.所以这就像宣传的那样.
但是,我真的希望在应用程序中根本没有明确的文本输入小部件.我希望用户能够开始输入以撰写邮件.
我想找到SWT程序的窗口ID.
我以标准方式启动SWT shell.然后,我如何找到已创建的窗口的ID?该程序使用Compiz-Fusion窗口管理器在Fedora 10上执行(如果这有所不同).
代码帮助解释我的意思:
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell();
// find window ID here??
shell.open();
while (!shell.isDisposed()) {
if(!display.readAndDispatch()) {
display.sleep();
}
}
}
Run Code Online (Sandbox Code Playgroud)
2009年3月6日更新 在查看并尝试了各种各样的事情之后(感谢VonC提供了以下建议),我发现了迄今为止有用的东西.这是非常狡猾的,但至少让我暂时继续其他一些工作.
从Control.embeddedHandle返回的ID接近窗口ID.它与可预测的偏移量不同.所以我的代码是:
public static void main(String[] args) {
...
Shell shell = new shell(display, SWT.NONE);
Composite e = new Composite(shell, SWT.EMBEDDED);
long windowID = e.embeddedHandle - WINDOW_ID_MAGIC_NUMBER;
e.dispose();
....
Run Code Online (Sandbox Code Playgroud)
WINDOW_ID_MAGIC_NUMBER是5+(在嵌入式复合之前添加到shell的小部件数).
到目前为止,我的系统似乎可靠.我还没有看到它是否会在不同的环境中崩溃.
我正在尝试研究如何使SWT小部件(例如Label,Frame)成为矩形以外的形状.
我使用setRegion()方法制作了一个自定义形状的主窗口.现在我希望窗口中的小部件遵循相同的形状.我已尝试在小部件本身上使用setRegion()方法(它们继承它)但没有任何反应.
如何使SWT窗口小部件具有自定义形状?