如何在GNU Smalltalk中运行GUI相关代码?

时间:2015-12-19 16:04:26

标签: smalltalk gnu-smalltalk

我有以下代码形式Dolphin Smalltalk:

gst

显示桌面上的数字时钟。这段代码可以在GNU Smalltalk上运行吗?我在VirtualBox虚拟机上试用了Fedora上的gst-bloxgst-blox并且它没有用,并且gst-browser在Ubuntu上不存在, $pass = md5($model->password); $newUser->password = $pass; 在Fedora和Ubuntu都给了一个

  

对象:CFunctionDescriptor new:1"< 0x7ffb3a010dc0>"错误:无效的C调用g_date_get_type

启动应用时。如何在GNU Smalltalk中完成?

2 个答案:

答案 0 :(得分:4)

我不熟悉GNU Smalltalk(我使用Pharo),所以也许有更好的方法来编写代码,但无论如何。

安装

从包管理器安装的

gst不需要任何GUI(它是一个CLI),即使它提供了它们,它也不会提供必要的系统库来运行它们,所以你必须安装它们manually

  • for gst-browser(new ui):libgtk2.0 libcairo2(在ubuntu上测试)
  • for gst-blox(old ui):tcl tk(未经测试)

代码

我发现代码有两个问题:GST不支持Process>>sleep:,它使用GUI。

至于GUI,Smalltalks有非常不同的UI库,Dolphin面向MS Windows,GNU Smalltalk使用GNU东西(GTK用于新版gst浏览器,TK / TCL用于旧版gst-blox),Pharo使用雅典等。即使他们分享一些概念(例如MVC模式),他们也不会真正共享API。

事实上,似乎GNUSmalltalk有“新”UI --- VisualGST(gst-browser),并且gst-blox已被弃用。

在任何情况下,经过一些挖掘后,我最终得到以下代码。它创建了一个GTK窗口(gst-browser使用的UI),然后它不断更新文本。

window := GTK.GtkWindow new: GTK.Gtk gtkWindowToplevel.
window setTitle: 'Time'.
window resize: 400 height: 300.
label := GTK.GtkLabel new.
label setText: Time now printString.
label show.
window add: label.
window show.

digitalClockProcess := [[
    (Delay forSeconds: 1) wait.
    label setText: Time now printString.
] repeat] fork.

gst-blox的代码必须使用tcl / tk,我不熟悉。

运行代码

要在gst-browser中运行代码,请从顶部菜单中选择'工具> “底部窗格”,然后将代码粘贴到底部窗格中的“工作区”(您可以通过“文件>新工作区”添加更多工作区。

答案 1 :(得分:0)

可以找到如何下载和构建GNU smalltalk的说明here。这应该可以解决你在ubuntu上使用gst-blox(带GUI的GNU smalltalk)的问题。