Tkinter标签不应该像它应该更新

时间:2017-04-12 20:56:56

标签: python-3.x tkinter

我正在研究的程序今天早些时候正常工作。我所做的唯一改变是尝试并最终设置程序,以便放大画布的中心而不是画布的左边缘。在实现这一目标的过程中,我开始注意到程序出错了。绝对表现得非常奇怪。当经度介于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()

1 个答案:

答案 0 :(得分:0)

len(str(px))的结果有时是10.当发生这种情况时,您不会更新小部件。这可以通过简单的打印声明轻松确定。