如何解决在画布上绘制的椭圆形直到我手动缩放缩放后才显示
是python的新手,大约一年的经验。使用python 3.8.5和tkinter。
项目涉及构建GUI,而该GUI上的地图存在问题。在其中一个框架中,我有一块画布。在此画布上,我绘制了代表位置的圆圈,用户可以使用鼠标进行平移/缩放,单击圆圈以获取信息等。
问题出在地图的初始绘制期间。我运行readCSV()函数,它正确加载位置和状态(在调试时手动检查“数据”列表),然后运行draw_MapDots()函数。画布是空白的...直到我进行鼠标滚轮缩放,然后所有位置才能正确显示。
从CSV中读取位置:
def readCSV():
global maplbl
global mapdot_maxx
global mapdot_maxy
global data
global tagdic
try:
f=open(filedialog.askopenfilename(),'r')
reader = csv.reader(f)
data = list(reader)
f.close
##### CSV Format ####
## Data stored in CSV are in the following format:
## [Tag ID],[x coordinate],[y coordinate],[read status]
##
for point in data:
tagdic[point[0]]= point[1:]
mapdot_maxx = max ([float(point[1]),mapdot_maxx])
mapdot_maxy = max ([float(point[2]),mapdot_maxy])
draw_MapDots()
#### trying random stuff to to get canvas to display
#
#map_canvas.scale('all',.2,.2)
#map_canvas.xview_moveto(mapdot_maxx/2)
#map_canvas.yview_moveto(mapdot_maxy/2)
#map_canvas.update_idletasks()
#MainWindow.update_idletasks()
maplbl.forget()
maplbl = Label(frame_mapdisplay,text = "Tag Load Complete",font = ("",24))
maplbl.pack()
except:
data = [[]]
def draw_MapDots():
global map_canvas
global mapdotsize
global mapdot_maxx
global mapdot_maxy
global data
global tagdic
map_canvas.delete("all") #Clears Map
origin = map_canvas.create_oval(0,.1,fill = "white",tag = "origin") #Creates (0,0) dot
#Creates a map of dots based on tag file opened
if len(data)>1:
for dot in data:
x = float(dot[1])
y = -float(dot[2])
oval = map_canvas.create_oval(x-mapdotsize,y-mapdotsize,x+mapdotsize,y+mapdotsize,fill = "red",activefill = "blue",tag = dot[0])
if dot[3] == '1':
map_canvas.itemconfigure(oval,fill = "green")
if dot[3] == '1':
map_canvas.itemconfigure(oval,fill = "yellow")
map_canvas.config(scrollregion=map_canvas.bBox(ALL)) #Set bounding Box for all objects to encompas created map dots
滚轮缩放
def zoom_map(event):
logging.debug(event)
global mapdotsize
scalefactor = .1
if event.delta/120 < 0:
map_canvas.scale('all',event.x,event.y,1-scalefactor,1-scalefactor)
mapdotsize *= 1-scalefactor
else:
map_canvas.scale('all',1+scalefactor,1+scalefactor)
mapdotsize *= 1+scalefactor
map_canvas.config(scrollregion=map_canvas.bBox(ALL)) #Restricts canvas bounding Box to the map dots
map_canvas.bind("<MouseWheel>",zoom_map)
解决方法
在写出问题时,我终于意识到发生了什么事。
我的CSV数字很大(几百到几千个范围),所以当我最初绘制圆圈(mapdotsize = 18)时,它们就被绘制了出来,但实际上距离很远。拖曳鼠标并没有在紧邻的区域显示它们,所以我认为它们没有被绘制。
以某种方式,当我用鼠标缩放时,[请其他人解释实际发生的情况]它似乎是将视图“捕捉”到包含地图点的绘图区域内的合理区域;看起来就像他们“突然出现”一样。我发现此问题的方法是,将地图向左拖动的次数比以前尝试的次数多,然后突然看到了点的“右侧”边缘。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。