【问题标题】:How to set frame's background in Racket?如何在 Racket 中设置框架的背景?
【发布时间】:2021-08-02 11:52:32
【问题描述】:

如何在 Racket 中设置框架的背景?我想更改窗口的背景颜色(出于可用性目的),同时仍然能够在该窗口中放置其他控件(并保持它们的全部功能)。

目前我看不到这种可能性。我尝试添加一个画布并更改其背景颜色(这适用于画布本身),但由于 GUI 工具包的几何管理,画布推出了其他控件。

如果有一种方法可以更改其他控件(按钮等)的颜色,那就太好了。

【问题讨论】:

    标签: user-interface racket user-experience usability


    【解决方案1】:

    我没有找到任何框架,但buttoncheck-boxmessage 的颜色可以更改,如果您在其构造函数中的字段label 中使用bitmap。您可以使用 PC 中的一些图像或以编程方式创建该位图:

    (require racket/gui/base)
    
    (define frame (new frame%
                       (label "Example")
                       (width 500)
                       (height 500)))
    
    (define button-bg (make-object bitmap% 100 50))
    (define dc (new bitmap-dc% (bitmap button-bg)))
    
    (send dc set-brush "green" 'solid)
    (send dc set-pen "black" 3 'solid)
    (send dc draw-rectangle 0 0 100 50)
    (send dc draw-text "Click Me!" 20 0)
    
    (define b (new button%
                   (parent frame)
                   (label button-bg)))
    
    (send frame show #t)
    

    【讨论】:

    • 感谢您的回复。我已经使用过这个技巧,主要用于图标化按钮(通过 mrlib/bitmap-label 库)。但它并没有解决窗口背景的主要问题(并且也使得使用按钮变得更加困难,因为方法(get-label)不再返回文本)。
    【解决方案2】:

    GUI 是跨平台的 - 有些平台不支持更改背景颜色。

    https://lists.racket-lang.org/users/archive/2012-February/050626.html

    【讨论】:

    • 感谢您的回复。但是基于 wxWidgets 的底层库 GUI 似乎支持所有平台的wxWindow::SetBackgroundColour method。此外,如果 Racket 不支持它的原因是尊重操作系统的主题,正如引用的邮件列表所暗示的那样,那么我应该问为什么我的 Racket GUI 应用程序不尊重我当前的操作系统主题,以及如何让它服从它?跨度>
    猜你喜欢
    • 2013-11-22
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 2019-06-25
    • 2015-06-02
    • 2014-02-27
    • 2011-09-09
    • 2015-07-22
    相关资源
    最近更新 更多