【发布时间】:2014-11-03 23:54:16
【问题描述】:
第一次在stackoverflow上发帖,所以我会努力解决这个问题...
我在 python 中运行一个数据采集模块,它的输入数据流是另一个 python 模块的输出。 Tkinter 滑块用于控制:绘图 x 轴的比例(绘制传入数据)和“生成速度”:
for axisnum in range( len( subplots ) ):
wScale = Tkinter.Scale( master = roots[root],
label = "View Width on Plot %s:" % ( axisnum ),
from_ = 3, to = 1000,
orient = Tkinter.HORIZONTAL,
sliderlength = 30,
length = subplots[axisnum].get_frame().get_window_extent().width,
)
wScale2 = Tkinter.Scale( master = roots[root],
label = "Generation Speed for Plot %s:" % ( axisnum ),
from_ = 1, to = 200,
orient = Tkinter.HORIZONTAL,
sliderlength = 30,
length = subplots[axisnum].get_frame().get_window_extent().width
)
wScale2.pack( side = Tkinter.BOTTOM )
wScale.pack( side = Tkinter.BOTTOM )
wScale.set( 100 )
wScale2.set( wScale2['to'] - 3 )
问题在于,虽然这会在画布上创建所有“n”对滑块小部件,但只有第一个实际上是活动的,而且还充当同时控制所有“n”个子图的“主滑块”。
轻微的修改导致“x 和 y 数据必须长度相同”被提出。
那么关于如何创建 tkinter 滑块来控制单个图形上各个子图的 x 轴比例的任何建议?
更新
也许问题出在我的 RealtimePlotter 上?
注意 dsets[Figure][subs][data] 将为您提供特定子图的数据点;潜艇通常应保留在“0”。
def RealtimePlotter():
global dsets, wScalesList, wScales2List
for i in range(len(Figures_List)):
for Scale in wScalesList:
Samples = min(len(dsets[i][0][0]),Scale[0].get())
XAxis = pylab.arange(len(dsets[i][0][0])-Samples,
len(dsets[i][0][0], 1
)
for t in range(len(linenum)-1):
#we choose lineax and axnum[1] because [0] is just the figure number
(lineax[t+1])[i].set_data(XAxis,pylab.array(dsets[i][0][t][-Samples:])
(axinfo[t+1]).axis([XAxis.min(),Xaxis.max(),-1.5,1.5])
for canvas in range(len(canvasList)):
canvasList[canvas].draw()
for root in range(len(roots)):
roots[root].after(100,RealtimePlotter)
【问题讨论】:
-
另外,不用说我是 python 新手
-
欢迎你,Luke,你可能会对 >>> stackoverflow.com/a/26268733/3666197 和贬低的例子感兴趣
-
不幸的是,因为我被告知要构建其他人的代码基础架构,所以我仅限于修改已经摆在我面前的内容,这是非常严格的限制
-
我不是 Tkinter 专家,但您的行为表明问题源于不保持 Scale 实例不同(您在循环中“覆盖”了 wScale 和 wScale2)。也许尝试形成和填充几个小部件列表?
标签: python matplotlib tkinter