我正在研究的程序今天早些时候正常工作。我所做的唯一改变是尝试并最终设置程序,以便放大画布的中心而不是画布的左边缘。在实现这一目标的过程中,我开始注意到程序出错了。绝对表现得非常奇怪。当经度介于0和-99.999999之间时,左下方的经度标签正确更新,否则如果为-100或更低,则更新经度非常慢。我决定尝试缩小问题并将print(px)插入到程序中,看到它工作正常,它只是没有更新的标签。在得到其他一些很好的工作后,我回来了,仍然无法弄明白。下面的代码来自程序,完全正如我在整个程序中看到的那样。当你向西/向左超过-100时,标签不会及时更新,就像它向东一样。 Latitude标签在屏幕上的任何位置都可以正常更新,无论如何它超过100或低于-100。我如何纠正这一点,并保持其他一切正常。
import tkinter as tk
from tkinter import *
from tkinter import Tk
class Example(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.canvas = tk.Canvas(self, background="black", width=714, height=714)
self.canvas.pack(fill="both", expand=True)
self.longitudecenter = -95.767018
self.latitudecenter = 38.956862
self.p = 58.5
global v
global w
s = Frame(self, width=150, height=20)
s.pack_propagate(0)
s.place(x=0,y=695)
v = Label(s, fg='black',anchor='w')
v.pack()
t = Frame(self, width=150, height=20)
t.pack_propagate(0)
t.place(x=150,y=695)
w = Label(t, fg='black',anchor='w')
w.pack()
parent.bind("<Motion>", self.on_motion)
self.canvas.focus_set()
def on_motion(self, event):
self.canvas.delete("sx")
self.startx, self.starty = self.canvas.canvasx(event.x),self.canvas.canvasy(event.y)
px = -(round((-self.longitudecenter + (self.p/2))- (self.startx * (self.p/714)),5))
py = round((self.latitudecenter + (self.p/2))-(self.starty * (self.p /714)),5)
print(px)
if len(str(px)) == 9:
v.config(text = "Longitude: " + str(px))
if len(str(px)) == 8:
v.config(text = "Longitude: " + str(px) + '0')
if len(str(px)) == 7:
v.config(text = "Longitude: " + str(px) + '00')
if len(str(px)) == 6:
v.config(text = "Longitude: " + str(px) + '000')
if len(str(px)) == 5:
v.config(text = "Longitude: " + str(px) + '0000')
if len(str(py)) == 9:
w.config(text = "Latitude: " + str(py))
if len(str(py)) == 8:
w.config(text = "Latitude: " + str(py) + '0')
if len(str(py)) == 7:
w.config(text = "Latitude: " + str(py) + '00')
if len(str(py)) == 6:
w.config(text = "Latitude: " + str(py) + '000')
if len(str(py)) == 5:
w.config(text = "Latitude: " + str(py) + '0000')
if __name__ == "__main__":
root = tk.Tk()
Example(root).pack(fill="both", expand=True)
root.mainloop()
答案 0 :(得分:0)
len(str(px))
的结果有时是10.当发生这种情况时,您不会更新小部件。这可以通过简单的打印声明轻松确定。