页面:(http://en.wikibooks.org/wiki/Haskell/GUI)描述了运行wx代码,可以安装wx然后必须"用GHC注册wxHaskell" - 但我认为wxHaskell的二进制安装程序(http://wxhaskell.sourceforge.net/download.html)会自动执行此操作吗?
我安装了wx-config,然后安装了wxPack和wxHaskell.然后做了wx和wxcore的cabal安装.我正在从Leksah运行一些wx演示,这些演示看起来非常好 - 但是他们有一些奇怪的错误(我找到了一个所谓的解决方案:"wxhaskell-labels-cant-display-full-text"),但我想尝试一些来自GHCi的事情.
我尝试运行他们的简单演示,以及错误:
D:\csPlangs\Haskell\play>ghci -package wx wxGui1.hs
GHCi, version 7.0.3: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package array-0.3.0.2 ... linking ... done.
Loading package stm-2.2.0.1 ... linking ... done.
Loading package bytestring-0.9.1.10 ... linking ... done.
Loading package containers-0.4.0.0 ... linking ... done.
Loading package Win32-2.2.0.1 ... linking ... done.
Loading package filepath-1.2.0.0 ... linking ... …Run Code Online (Sandbox Code Playgroud) 是否可以在Windows环境中使用Haskell捕获屏幕(或窗口)?(即每隔几分钟拍摄一次屏幕截图).如果是这样,怎么会这样做(再次,在Haskell中,对于Windows环境)?
更多信息:我是Haskell的初学者.一位朋友希望通过为我的会计师事务所鞭打一些程序来削减开发成本,但他坚持认为我使用的是Haskell.他想要一个能够监控不同Windows XP工作站桌面的工具.它可能必须是客户端/服务器类型的应用程序.他只需要监控桌面活动,因此他不想要任何已经上市的昂贵管理软件.我已经筛选了大量文档,并且只能找到wxHaskell,但我在捕获屏幕时找不到太多,特别是对于Windows环境.
我想在Mac OS X上分发一个wxHaskell应用程序.如何创建可以独立使用的Mac OS X应用程序而无需用户安装任何额外的库?
我注意到了为Mac OS X 制作捆绑包的cabal-macosx项目.app.当我构建示例wxHello应用程序时,应用程序包在我的机器上正常工作(添加extra-lib-dirs: /usr/lib到.cabal文件后).但是当我在另一台机器上试用它时,我得到了错误:Dyld Error Message: Library not loaded: /Users/binil/.cabal/lib/wxc-0.90.0.3/ghc-7.0.4/libwxc.dylib.
% ghci -framework Carbon Main.hs
*Main> enableGUI >> main
Run Code Online (Sandbox Code Playgroud)
这是我得到的而不是一个工作程序:
2013-01-14 00:21:03.021 ghc[13403:1303] *** Assertion failure in +[NSUndoManager _endTopLevelGroupings], /SourceCache/Foundation/Foundation-945.11/Misc.subproj/NSUndoManager.m:328
2013-01-14 00:21:03.022 ghc[13403:1303] +[NSUndoManager(NSInternal) _endTopLevelGroupings] is only safe to invoke on the main thread.
2013-01-14 00:21:03.024 ghc[13403:1303] (
0 CoreFoundation 0x00007fff8c8ea0a6 __exceptionPreprocess + 198
1 libobjc.A.dylib 0x00007fff867243f0 objc_exception_throw + 43
2 CoreFoundation 0x00007fff8c8e9ee8 +[NSException raise:format:arguments:] + 104
3 Foundation 0x00007fff884966a2 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] + 189
4 Foundation 0x00007fff884fc8b7 +[NSUndoManager(NSPrivate) _endTopLevelGroupings] + 156
5 AppKit 0x00007fff8ecb832d …Run Code Online (Sandbox Code Playgroud) 在图像浏览器实例说明如何显示在一个ScrolledWindow的图像.
如果我想在可用空间中显示图像,根据需要缩放位图,该怎么办?
我的google-fu在这一次失败了.
编辑:我以为我有一些东西scrolledWindowSetScale,但看起来它在这里没有帮助.
我正在试验wxHaskell.我无法在ghci下运行应用程序,所以我必须使用应用程序来测试它.我想用println调试来测试程序.但是,似乎putStrLn在GUI中不起作用:
{-# LANGUAGE Haskell2010 #-}
module Main where
import Graphics.UI.WX
drawUI dc view = do
circle dc (point 10 10) 5 [penKind := PenSolid, color := red]
putStrLn "painted"
helloGui :: IO ()
helloGui = do
f <- frame [
text := "Example",
resizeable := False,
bgcolor := white,
layout := space 400 300,
on paint := drawUI]
return ()
main :: IO ()
main = do
putStrLn "Started"
start helloGui
Run Code Online (Sandbox Code Playgroud)
如果我评论出来启动helloGui,一切都打印得很好.但是,如果我将其返回,则不会打印任何内容,但会显示窗口.这有什么不对?
我正在寻找一个wx haskell拖放示例.我还没找到.
有空吗?还是提示?
至今:
on drag事件(但没有"在下降")left up目标我看到一些注释,我应该将一个drop target附加到object上,但是我看不到它是如何被调用的:
Graphics.UI.WXCore.DragAndDrop
L 51
- | 创建'DropSource'.然后'dragAndDrop'用'DataObject'替换target的'DataObject'.
dropSource :: DataObject a - > Window b - > IO(DropSource())
我看不到Graphics.UI.WXCore.DragAndDrop上面的WX层在哪里
无论如何,现在相当模糊......
编辑:这是我现在所处的位置:在拖动时不要激活,所以也没有dragAndDrop(在xinput上的鼠标就在那里看看dragger是怎么回事)(就是我从[O]得到的),但我不知道从这里得到事件)
--- test where DnD from yinput to xinput
module Main where
import CustoWidget
import Graphics.UI.WX hiding (empty)
import Data.Graph.Inductive
import Data.Maybe
import Control.Monad
import Graphics.UI.WX.Events
import Graphics.UI.WXCore.WxcClassesMZ
import Graphics.UI.WXCore.WxcClassesAL
import Graphics.UI.WXCore.DragAndDrop
import Graphics.UI.WXCore.Events
import Debug.Trace
main
= start ballsFrame
-- …Run Code Online (Sandbox Code Playgroud) 我正在使用ghc 7.6.3.我从这里安装了wxHaskell:https://github.com/wxHaskell/wxHaskell
它工作,示例程序编译和运行成功.
现在唯一的问题是我想在mac OS X上分发一个wxHaskell应用程序.我尝试使用macosx-app和cabal-macosx(https://github.com/michaelt/cabal-macosx)制作一个"app"文件.它在我的机器上运行正常,但无法在另一台计算机上运行.我收到以下错误:
Dyld Error Message: Library not loaded: /Users/user/.cabal/lib/wxc-0.90.1.0/ghc-7.6.3/libwxc.dylib.
Run Code Online (Sandbox Code Playgroud)
我使用的是OS X 10.8.4(Mountain Lion),但我也有兴趣在Windows上编译应用程序并重新分发它们.
什么是重新分发wxHaskell应用程序的最佳方法?
Setup.hs
-- Example Setup.hs for the wxHello app.
import Distribution.MacOSX
import Distribution.Simple
main :: IO ()
main = defaultMainWithHooks $ simpleUserHooks {
postBuild = appBundleBuildHook guiApps -- no-op if not MacOS X
}
guiApps :: [MacApp]
guiApps = [MacApp "WxHello"
(Just "resources/WxHello.icns")
Nothing -- Build a default Info.plist for the icon.
[] -- No other resources.
[] …Run Code Online (Sandbox Code Playgroud) 我试图将wxHaskell安装到运行Windows XP64的机器上,使用gcc从源代码构建MinGW/MSYS和wxWidget 3.0.我做了:
cabal install wx
Run Code Online (Sandbox Code Playgroud)
并得到一个错误:
...
Configuring wxc-0.90.0.4...
setup.exe: wx-config: does not exist
Failed to install wxc-0.90.0.4
cabal.exe: Error: some packages failed to install:
wx-0.90.0.1 depends on wxc-0.90.0.4 which failed to install.
wxc-0.90.0.4 failed during the configure step. The exception was:
ExitFailure 1
wxcore-0.90.0.3 depends on wxc-0.90.0.4 which failed to install.
Run Code Online (Sandbox Code Playgroud)
我已成功使用wxWidgets在C++(gcc)中编写示例应用程序.所以我确实有一个工作的wxWidget安装.我有wx-config:
$ which wx-config
/usr/local/bin/wx-config
Run Code Online (Sandbox Code Playgroud)
问题是这wx-config是一个unix shell脚本,并且cabal(从MSYS调用)以某种方式拒绝识别它,即使它在系统路径上.如果我wx-config在MSYS中运行,我得到类似的东西:
$ wx-config --cxxflags
-I/usr/local/lib/wx/include/msw-unicode-3.0 -I/usr/local/include/wx-3.0 -D_LARGE
FILE_SOURCE=unknown -DWXUSINGDLL -D__WXMSW__ -mthreads
Run Code Online (Sandbox Code Playgroud)
我问了一个问题/sf/ask/1539913441/,看看是否可以将脚本转换为exe,但是没有人回应任何解决方案.
这里还有一个相关的问题, …
所以我正在尝试使用reactive-banana + wxHaskell进行GUI编程.作为Haskell及其开发工具的新手,我对堆栈感到非常困惑.
所以我试着stack install wx,它提示我安装wxcore,这提示我安装wxc和wxdirect.在我之后stack install wxdirect,我尝试跑步stack install wxc,但是看见:
While constructing the BuildPlan the following exceptions were encountered:
-- Failure when adding dependencies:
wxdirect: needed (>=0.90.1.1), not present in build plan (latest is 0.92.1.0)
needed for package: wxc-0.92.1.1
-- While attempting to add dependency,
Could not find package wxdirect in known packages
Recommended action: try adding the following to your extra-deps in {project root}/stack.yaml
- wxdirect-0.92.1.0
Run Code Online (Sandbox Code Playgroud)
总之,我试图用 …
每次用户与我的程序交互时,我都很难找到改变的方法.这很难解释,这是一个例子(Haskell + wxhaskell):
simulate :: Int -> Frame () -> IO ()
simulate qNr window = do
fdata <- readFile "qarchive"
case (split (listTake (split fdata '\n') qNr 0) '#') of
(qst:a:b:c:coralt:answer:x) -> do
-- GUI Controls Initialization (buttons,text,etc...)
nextButton <- button window [text := "Next Question ->", on command := set infoField [text := "Next Question"], position := pt 185 155]
return ()
main :: IO ()
main = start gui
gui :: IO ()
gui = do
window …Run Code Online (Sandbox Code Playgroud)