2017-04-12 112 views
-2

我正在開發的程序今天早些時候正確運行。我所做的唯一改變就是嘗試並最終讓程序設置好,以便放大畫布的中心而不是畫布的左邊緣。在這個過程中,我開始注意到在程序中發生了什麼問題。絕對錶現得很怪異。當經度在0到-99.999999之間時,左下角的經度標籤正確更新,否則如果是-100或更小,更新經度非常慢。我決定嘗試縮小問題範圍,並將打印(px)插入到程序中,並發現它工作正常,它只是沒有更新的標籤。在得到其他幾項工作後,我回來了,仍然無法弄清楚。下面的代碼來自程序,完全符合我在完整程序中看到的內容。當你向西/遠離-100時,標籤不會及時更新,就像它向東進一步一樣。 Latitude標籤在屏幕上的任何位置都可以更新,不出所料,它會超過100或低於-100。我如何糾正這一點,並保持其他一切正常工作。Tkinter標籤未更新,應該是

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

len(str(px))的結果有時是10,當發生這種情況時,您並未更新小部件。這很容易通過簡單的打印語句來確定。

+0

我從來沒有改變任何事情,直到今天早上從來沒有問題。奇怪,但確實消除了這個問題。當我從一個完整的經度變成一個十進制的經度時,它可能會導致公式的答案發出一個更大的數字,導致呃逆的發生。奇怪的。我肯定不能想出任何其他推理來改變這種狀況。 – confused