Contact me: hankecnc@gmail.com

无法将以 % 开头的代码添加到用户按钮 #1674

推推 grbl 3年前 (2023-02-03) 286次浏览
打开
jsiddall 打开了这个问题 2022 年 2 月 16 日 · 7条评论
打开

无法将以 % 开头的代码添加到用户按钮#1674

jsiddall 打开了这个问题 2022 年 2 月 16 日 · 7条评论

评论

无法将以 % 开头的代码添加到用户按钮 #1674

我正在尝试根据我在另一个 bCNC 设置上工作的一些按钮在新的 bCNC 安装上设置一些用户按钮。按钮很简单,但当前的主人 (0.9.14.318) 甚至不让我在将代码粘贴到命令字段时单击“确定”。例如:它将接受这个:

G53 G0 Z[_newz]

但不是这个:

%_newz=-78.2+float(app.entry("Enter stock thickness"))
G53 G0 Z[_newz]

绞尽脑汁想为什么我不能得到这么简单的东西,因为它以前工作得很好。任何意见,将不胜感激!

无法将以 % 开头的代码添加到用户按钮 #1674
作者

更新:我尝试从 CLI 运行它并发现了回溯:

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/dist-packages/bCNC/Utils.py", line 526, in __call__
    return self.func(*args)
  File "/usr/local/lib/python3.8/dist-packages/bCNC/Utils.py", line 860, in ok
    config.set("Buttons", "command.%d"%(n), self.command.get("1.0",END).strip())
  File "/usr/lib/python3.8/configparser.py", line 1201, in set
    super().set(section, option, value)
  File "/usr/lib/python3.8/configparser.py", line 894, in set
    value = self._interpolation.before_set(self, section, option,
  File "/usr/lib/python3.8/configparser.py", line 402, in before_set
    raise ValueError("invalid interpolation syntax in %r at "
ValueError: invalid interpolation syntax in '%_newz=-78.2+float(app.entry("Enter stock thickness"))\nG53 G0 Z[_newz]' at position 0

所以,我查看了 configparser.py 并发现了这条注释:

If a user needs to use a bare % in a configuration file, she can escape it by writing %%. Other % usage is considered a user error and raises `InterpolationSyntaxError'.

所以我在前面加了一个额外的 % 它接受了命令。但是当我运行它时,我得到了Name 'basestring' is not definedName '_newz' is not defined很明显有些东西坏了。

不幸的是,解决这个问题超出了我的理解范围。

无法将以 % 开头的代码添加到用户按钮 #1674
贡献者

你好@jsiddall

这与用于 python2 / python3 兼容性的 Utils.py 中的#1405和 basestring 覆盖有关

我还注意到 bCNC.ini 没有更新

在 CNC.py 的第 2244 行及后续行中,eval(line,CNC.vars,self.vars) 不起作用,并且 CNC.vars 似乎未更新。

	def evaluate(self, line, app=None):
...
		elif isinstance(line, types.CodeType):
			import traceback
			print ("line,type(line)",line, type(line))
# 			traceback.print_stack()
			v = self.vars
			print ("CNC.vars")
			for key,value in CNC.vars.items():
				print (key,value)
			v['os'] = os
			v['app'] = app
			return eval(line,CNC.vars,self.vars)

但我还没有找到解决方法……
也许@GitHubCaps知道解决方法吗???…

无法将以 % 开头的代码添加到用户按钮 #1674
作者

谢谢@DodoLaSaumure

我查看了其中一些线程,并尝试了一些代码更改,这些更改似乎可以解决问题,但实际上没有一个有效:(

无法将以 % 开头的代码添加到用户按钮 #1674
贡献者
GitHubCaps 评论了 2022 年 2 月 19 日  

我有一个解决办法,但只是回到这个项目上。@DodoLaSaumure 如果不出意外,我会在这里为您附上一些东西!哈哈,不好意思,最近比较忙。。。

PS:这与#1405无关,而是 Python3 configparser 的变化,它处理代码的方式不同,所以这与我们无关!

注意:#1352是它被发现的地方@BernardG,我只是忘记了我修复了这个问题,但没有发布修复。

无法将以 % 开头的代码添加到用户按钮 #1674
作者

谢谢@GitHubCaps

很遗憾听到你这么忙,但很高兴听到你有解决办法。我看过#1352,但自从它关闭后,我想我遇到了不同的问题!

无法将以 % 开头的代码添加到用户按钮 #1674
作者

还有一点信息:我之前使用的系统运行的是 Ubuntu 18.04,所以可能是 python2。这与 python3 configparser 中断是有道理的。

无法将以 % 开头的代码添加到用户按钮 #1674
贡献者

我看过#1352,但自从它关闭后,我想我遇到了不同的问题!

@jsiddall在我有机会为初始问题实施实际修复之前,作者关闭了它(因为他们无法获得他们想要的结果)。当时我打算做一个推送(或重新打开),但偏离了方向!

这与 python3 configparser 中断是有道理的。

确实是的!

我应该在宏/按钮/快捷方式的文档中提到这一点,但对于我们这些喜欢保持字符串简短的人来说,不再适用于 3 的一件事是省略modulo. 现在,您必须使用空格,否则它会被当作命令使用。

用于工作:
"%s"%(some_variable)

现在强制执行:
"%s" % (some_variable)

另外,必须使用for 3 和for 2。嗯,起初我在不同的地方添加和剥离,直到我找到更好的解决方案,在这个过程中我不小心 (lol) 使 2 与 3 相同。所以知道在 2 中不起作用的 unicode(保存/写入)现在可以通过猴子补丁工作。%%%

免费注册 在 GitHub 上加入此对话。已有帐户? 登录评论
标签
还没有
项目

还没有

发展

没有分支机构或拉取请求

3人参加
无法将以 % 开头的代码添加到用户按钮 #1674无法将以 % 开头的代码添加到用户按钮 #1674无法将以 % 开头的代码添加到用户按钮 #1674

喜欢 (0)