开源改变世界

gladevcp hal_bar.py: AttributeError: ‘NoneType’ 对象没有属性 ‘red_float’ #1596

推推 grbl 3年前 (2023-01-30) 199次浏览
关闭
arvidbrodin 打开了这个问题 2022 年 2 月 12 日 · 8 条评论 · 由#1639修复
关闭

gladevcp hal_bar.py: AttributeError: ‘NoneType’ 对象没有属性 ‘red_float’#1596

arvidbrodin 打开了这个问题 2022 年 2 月 12 日 · 8 条评论 · 由#1639修复

注释

gladevcp hal_bar.py: AttributeError: 'NoneType' 对象没有属性 'red_float' #1596
贡献者

以下是我重现该问题所遵循的步骤:

  1. 安装 Debian 11.2
  2. 从 github ( fae9195 ) 克隆 linuxcnc,为 uspace 构建
  3. . 脚本/rip 环境
  4. sudo apt 安装林间空地
  5. 运行’glade’,创建新项目
  6. 添加 GtkWindow(可选:将 ID 设置为“window1”)
  7. 添加 GtkBox
  8. 添加 HAL_VBar
  9. (可选:设置 Packing->Expand 以查看小部件。不必产生错误)

这是我期望发生的事情:

林间空地应该能够显示 HAL_VBar。

这是发生了什么:

回溯(最近调用最后):
文件“/home/arvidb/src/linuxcnc-dev/lib/python/gladevcp/hal_bar.py”,第 304 行,在 expose
cr, (w, h), set_color, alpha = self ._expose_prepare(widget)
文件“/home/arvidb/src/linuxcnc-dev/lib/python/gladevcp/hal_bar.py”,第 151 行,在 _expose_prepare
set_color(self.bg_color)
文件“/home/arvidb/src/linuxcnc -dev/lib/python/gladevcp/hal_bar.py”, line 136, in set_color
return cr.set_source_rgba(c.red_float, c.green_float, c.blue_float, alpha)
AttributeError: ‘_ResultTuple’ 对象没有属性 ‘red_float’

如果将项目另存为 my-panel.ui 并使用“gladevcp my-panel.ui”运行,则会出现相同的错误。(需要将 GtkWindow ID 设置为上面的“window1”。)

在此之前它工作正常:

不知道,没试过旧版本。

hansu 添加了一个提交到 hansu/linuxcnc 引用了这个问题 2022 年 2 月 28 日

gladevcp hal_bar.py: AttributeError: 'NoneType' 对象没有属性 'red_float' #1596
成员

你能检查一下 hansu@ 923710f是否按预期工作吗?

gladevcp hal_bar.py: AttributeError: 'NoneType' 对象没有属性 'red_float' #1596
贡献者作者

您好,感谢您对此的调查!

我在 Debian 10.11 和 11.2 上测试了你的补丁,方法是将你的提交挑选到当前的 master 上。两个系统的结果是一样的:

  • 在 glade 中创建小部件按预期工作。
  • 保存 .ui 文件并使用 gladevcp 运行它会按预期工作。
  • 但是,在 glade 中重新打开 .ui 文件会导致以下错误和未绘制的小部件:
Traceback (most recent call last):
  File "/home/arvidb/src/linuxcnc-dev/lib/python/gladevcp/hal_bar.py", line 311, in expose
    cr, (w, h), set_color, alpha = self._expose_prepare(widget)
  File "/home/arvidb/src/linuxcnc-dev/lib/python/gladevcp/hal_bar.py", line 158, in _expose_prepare
    set_color(self.bg_color)
  File "/home/arvidb/src/linuxcnc-dev/lib/python/gladevcp/hal_bar.py", line 143, in set_color
    return cr.set_source_rgba(c.red, c.green, c.blue, alpha)
AttributeError: 'NoneType' object has no attribute 'red'
gladevcp hal_bar.py: AttributeError: 'NoneType' 对象没有属性 'red_float' #1596
成员

好的,试试这个:hansu@ 8f93176

gladevcp hal_bar.py: AttributeError: 'NoneType' 对象没有属性 'red_float' #1596
贡献者作者

今天仅在 11.2 上进行快速测试:我上一篇文章中的错误已修复,但颜色在 glade 中显示不正确:任何 Zone 0/Zone1 颜色,但黑色显示为白色。(黑色显示为黑色。)

gladevcp hal_bar.py: AttributeError: 'NoneType' 对象没有属性 'red_float' #1596
成员

嗯。你能发布你的例子来验证颜色吗?

gladevcp hal_bar.py: AttributeError: 'NoneType' 对象没有属性 'red_float' #1596
贡献者作者

我现在不在我的测试计算机旁,但简而言之,我在 glade 中创建了一个新项目,添加了一个主窗口和一个垂直的 hal_bar。然后我使用 glade 中的控件(组件的颜色选择器)来设置区域颜色。我增加了 glade 中的值字段以查看该栏。

我相信酒吧的背景是浅灰色(我是红绿色盲,所以可能会在色调上弄错)。默认情况下,栏本身是黑色的,无论是可见的还是根据颜色选择器。颜色选择器中的任何颜色变化都会产生纯白色条(将其变回黑色会使它再次变黑)。例如,如果我将区域 0 设置为黑色,将区域 1 设置为其他颜色,我会得到一个黑色/白色条,在字段之间具有渐变。但始终只是纯黑色或纯白色。

hansu 添加了一个提交到 hansu/linuxcnc 引用了这个问题 2022 年 3 月 2 日

gladevcp hal_bar.py: AttributeError: 'NoneType' 对象没有属性 'red_float' #1596
成员

是的,现在我明白了。使用 Gdk.RGBA() 并不是一个好主意,因为 glade 的接口似乎需要 Gdk.Color。
hansu@ 5e7a8c0
实际上只需要非常非常小的改变。

gladevcp hal_bar.py: AttributeError: 'NoneType' 对象没有属性 'red_float' #1596
贡献者作者

这似乎已经成功了。在 debian 10.11 和 11.2 上测试。做得好!谢谢!