据我所知,Tk按键和键释放事件只能在按键实际按下或释放时触发?
但是,使用以下简单代码,如果我按住"a"键,我将获得连续按键/键释放事件的连续序列.
我做错了什么还是TkInter越野车?这是关于Linux的Python2.7.
from Tkinter import *
def keyup(e):
print 'up', e.char
def keydown(e):
print 'down', e.char
root = Tk()
frame = Frame(root, width=100, height=100)
frame.bind("<KeyPress>", keydown)
frame.bind("<KeyRelease>", keyup)
frame.pack()
frame.focus_set()
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
按住"a"时输出:
down a
up a
down a
up a
down a
up a
down a
up a
etc...
Run Code Online (Sandbox Code Playgroud) 首先,我不期待一个解决方案,只是希望有一些关于如何开始的指示.
我有一个带嵌入式Python解释器的C程序.程序用作输入的Python脚本显然是指C语言定义的对象和函数.我现在想让这些物品中的一些可以腌制.
pickle文档描述了如何使用扩展类型进行扩展__reduce__.但这是一个Python方法 - 我如何在底层PyObject中定义它?
相当肯定我错误地理解了一些东西......
我一直试图找出如何使用python解决以下问题:
到目前为止我所知道的:
因此,步骤4将涉及变换矩阵,一旦您知道旋转和平移矩阵,看起来这个步骤很容易使用以下之一:
我无法解决的是如何在给定a,b,c的"新"坐标的情况下计算旋转和平移矩阵.
我可以看到,在一般情况下(非刚体),旋转部分是Wahba的问题,但我认为对于刚体,应该有一些更快的方法直接计算它,通过使用一组正交单位向量要点.
假设我有一个3D numpy.array,例如尺寸为xyz,有没有办法沿特定轴迭代切片?就像是:
for layer in data.slices(dim=2):
# do something with layer
Run Code Online (Sandbox Code Playgroud)
编辑:为了澄清,该示例是一个dim = 3数组,即shape =(len_x,len_y,len_z).Elazar和等效的kamjagin解决方案有效,但不是那么通用 - 你必须[:, :, i]手工构建,这意味着你需要知道尺寸,而且代码不够通用,无法处理任意尺寸的数组.您可以通过使用类似的东西来填充缺失的维度[..., :],但是您仍然需要自己构建它.
对不起,应该更清楚,这个例子有点太简单了!
是否可以访问传递给它的参数__init__,而无需显式存储它们?
例如
class thing(object):
def __init__(self, name, data):
pass # do something useful here
t = thing('test', [1,2,3,])
print t.__args__ # doesn't exist
>> ('test', [1,2,3])
Run Code Online (Sandbox Code Playgroud)
用例是创建一个超类,它可以自动存储用于创建从中派生的类实例的参数,而不必将所有参数显式传递给超类__init__.也许有一种更容易的方法!
我有一些代码可以:
try:
result = func()
except StandardError as e:
result = e
Run Code Online (Sandbox Code Playgroud)
如何检查是否result包含异常?
使用isinstance(result, Exception)不起作用,因为异常是一个类,而不是一个实例,例如type(ValueError)给出<type 'type'>.
---编辑---
那是愚蠢的; 虽然上面的代码是我正在使用的正确方法func(),但我的测试func()是做什么的return ValueError,而不是raise ValueError.前者返回类,后者返回实例.所以问题不像描述的那样.