2015-09-10 2 views
-2

Мой код здесь очень простой, но я не могу это исправить
Пожалуйста, держите меня как можно дальше от «классов» и «деф» и так далее! : D
Мне кажется, что формулы для расчета нового положения иглы никогда не обновляются и застревают на первом месте
До сих пор я нашел ответы с этого сайта, но я застрял на 2 дня
большое спасибо за вашу помощь и за время, потраченноеФормула не обновляется

from tkinter import * 
import math 

centerx = 150 
centery = 150 
handlelength = 80 
start = 0 
end = 200 

fenetre = Tk() 

label = Label(fenetre, text = "RPM") 
label.pack() 

fenetre.title('SSie DashBoard') 

photo1 = PhotoImage(file="gauge.gif") 

canvas = Canvas(fenetre, width = 300, height = 300) 
canvas.create_image(0,0, anchor = NW, image = photo1) 
canvas.pack() 

#value = StringVar() 
value = int() 
scale = Scale(fenetre, width = 20 ,from_ = 0, to = 360, orient = HORIZONTAL, variable = value).pack() 

rang = end - start 
deg = 300*(value - start)/rang - 240 
rad = math.radians(deg) 

label = Label(fenetre, textvariable = value).pack() 
label = Label(fenetre, text = rang).pack() 
label = Label(fenetre, text = deg).pack() 
label = Label(fenetre, text = rad).pack() 

needle = canvas.create_line(centerx, centery, 150 #centerx-handlelength, 150 #centery, width = 5, fill = 'red') 

canvas.coords(needle, centerx, centery, centerx+handlelength*math.cos(rad), centery+handlelength*math.sin(rad)) 

fenetre.mainloop() 
+2

НУЖЕН def. И вы ДОЛЖНЫ учиться использовать классы. –

+0

Каким должен быть ваш код? Почему, по-вашему, что-то нужно обновлять? Я не вижу никакого кода, который делает какое-либо обновление. Вы просто создаете виджеты, которые ничего не делают. –

ответ

-2

Вот быстрый и грязный решение, это должно работать, но я настоятельно рекомендую удалить этот код и начать обучение OOP. Также вам нужно def, потому что если ваша программа попадает в строку fenetre.mainloop(), ваш код не будет выполнен снова. Поэтому ваша главная проблема заключалась в том, что вы были выполнены только один раз.

from tkinter import * 
import math 

centerx = 150 
centery = 150 
handlelength = 80 
start = 0 
end = 200 

fenetre = Tk() 

label = Label(fenetre, text = "RPM") 
label.pack() 

fenetre.title('SSie DashBoard') 

photo1 = PhotoImage(file="gauge.gif") 

canvas = Canvas(fenetre, width = 300, height = 300) 
canvas.create_image(0,0, anchor = NW, image = photo1) 
canvas.pack() 

#value = StringVar() 
value = IntVar() ## You need a special IntVar if you want to use it for widgets 
scale = Scale(fenetre, width = 20 ,from_ = 0, to = 360, orient = HORIZONTAL, variable = value).pack() 

rang = end - start 
deg = 300*(value.get() - start)/rang - 240 ## to get your value use value.get() method 
rad = math.radians(deg) 

label = Label(fenetre, textvariable = value.get()).pack() 
label = Label(fenetre, text = rang).pack() ## you are overwriting your instance over and over again 
label = Label(fenetre, text = deg).pack() ## also if you use .pack() it will save None to your 'label' 
label_rad = Label(fenetre, text = rad) 
label_rad.pack() ## this is how you do it right 

def update(): ## complicated syntax !!! 
    rang = end - start 
    deg = 300*(value.get() - start)/rang - 240 
    rad = math.radians(deg) 
    canvas.coords(needle, centerx, centery, centerx+handlelength*math.cos(rad), centery+handlelength*math.sin(rad)) 
    fenetre.after(10, update) # calling this function ever 10ms 

needle = canvas.create_line(centerx, centery, 150 *centerx-handlelength , 150+centery , width = 5, fill = 'red') 
canvas.coords(needle, centerx, centery, centerx+handlelength*math.cos(rad), centery+handlelength*math.sin(rad)) 

update() ## Calling your 'def'-method, caution it's black magic. 
fenetre.mainloop() 

Пожалуйста, ознакомьтесь с комментариями в коде и исправьте все же содержащие ошибки самостоятельно.

+0

1) Пожалуйста, не отвечайте на плохие вопросы. 2) Использование аргумента 'command' для' Scale' намного лучше, чем использование метода 'after' –

+0

1) Я отвечу на« плохие вопросы », если они не помечены. 2) Поскольку он не желает использовать классы или «def», метод after будет соответствовать его потребностям для дальнейшей работы. Как насчет того, чтобы вы попробовали помочь ему с методами и классами вместо того, чтобы жаловаться. Каждый может жаловаться – VRage

+0

Большое спасибо за помощь @VRage. Я знаю аргумент «command» изнутри масштаба. Вещи становятся сложными оттуда с «def» ... Я хотел, чтобы все было как можно проще. Идем теперь, чтобы узнать «def» .... Bye – Ben