【问题标题】:GUI: configure the racket:text% to read-onlyGUI:将球拍:文本%配置为只读
【发布时间】:2019-12-16 09:52:39
【问题描述】:

我想使用编辑器来显示来自程序的日志,我只需要一个非常基本的文本字段:

  • 带有垂直滚动条
  • 带有用于复制/粘贴的上下文菜单
  • 防止用户更改文本

为了激活复制/粘贴菜单,我使用了框架中的球拍类:text%,而不是基本的。

如何防止用户更改文字?

我阅读了文档,据我了解,我发现的最接近的是锁定方法:

https://docs.racket-lang.org/gui/editor___.html?q=lock#%28meth._%28%28%28lib._mred%2Fmain..rkt%29._editor~3c~25~3e%29._lock%29%29

但这并不方便,因为它也阻止了我的程序写入数据。 我也发现 get-read-write?但找不到set-read-write。

【问题讨论】:

    标签: racket


    【解决方案1】:

    使用lock 方法,只需围绕您想要进行的任何修改解锁编辑器。您可能会发现编写 call-with-unlock 辅助函数或 with-unlock 宏很有用。

    如果您从事件空间的处理程序线程进行更新(并且您可能应该;如果它们来自另一个线程,则使用 queue-callback),那么只要您在更新结束时重新锁定编辑器,用户将永远无法与解锁的编辑器进行交互。

    【讨论】:

    • 那么,当编辑器解锁时,用户不会有意外插入数据的风险吗?
    • 对。用户交互通过事件空间的处理程序线程中运行的代码处理的事件发生。该线程一次只能做一件事,因此如果它正忙于运行您的代码,那么用户事件会排队等待处理程序线程空闲。因此,如果您的代码在返回之前锁定了编辑器,那么当处理程序线程处理排队的用户事件时,它将被锁定。
    猜你喜欢
    • 2018-09-03
    • 1970-01-01
    • 2019-01-28
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    相关资源
    最近更新 更多