Pmw ScrolledCanvas:如何滚动到特定项目?

嗨,我有一个滚动canvas对象(SC),并且已经确定了一个项目 在我想滚动到的画布上. 我一直在读书 实验,但取得不大的成功. 到目前为止 并获得了使用sc.xview()可见的画布的比例 和sc.yview() 并使用sc.bbox(all)建立了整个画布bbox 我什至继续使用一些基本的数学来解决我是否 需要滚动,然后使用: sc.xview_moveto(itemx) 但这一切都很凌乱,我还没有工作. 必须有一种更简单的方法? 谢谢! 约翰

# 回答1

Mrbluesky写道: 完成了! 我意识到寻找使用TK的方法 会给我线索. 为了其他任何想这样做的可怜的灵魂的好处,这是我的 代码: def scrolltoitem(self,item): """确定指定项目是否正在显示. 如果不是,请滚动.""" #该项目的边界框 Xitemmin,Yitemmin,Xitemmax,Yitemmax = self.bbox(item) #找出画布的比例(0.0至1.0)是 #当前正在查看 xviewminp,xviewmaxp = self.xview() yviewminp,yviewmaxp = self.yview() #找出画布的全部范围 scrollregionstr = self.component(" canvas").cget(" scrollregion") scrollregionelementsststr = scrollregionstr.split('',4) XCanVasmin = float(ScrollRegionElementsst [0]) yCanvasmin = float(scrollregionelementsst [1]) XCanVasmax = float(scrollregionelementsst [2]) YCANVASMAX = float(scrollregionelementsst [3]) Xrange = float(Xcanvasmax -XCanvasmin) yrange = float(ycanvasmax -ycanvasmin) #计算出画布的帆布坐标 那是 #当前正在查看 xviewmin = float(xviewminp)*xrange xviewmax = float(xviewmaxp)*xrange yviewmin = float(yviewminp)*yrange yviewmax = float(yviewmaxp)*yrange 如果xItemmin XViewMax: newxViewp = float(xItemmax -xcanvasmin- (xviewmax-xviewmin))/xrange self.xview_moveto(newxviewp) 如果是Yitemmin YviewMax: newyviewp = float(yitemmax -ycanvasmin- (yviewmax-yviewmin))/yrange self.xview_moveto(newyviewp) (我仍然非常感谢对此的任何批评!) 约翰

标签: python

添加新评论