У меня возникла проблема с созданием графического интерфейса Tkinter, который рассчитывает, сколько денег вы бы заработали за данный момент. Это просто секундомер с кнопкой запуска и остановки. Когда вы запустите секундомер, вы увидите рядом с секундомером, сколько денег вы бы заработали за заданное время на секундомере. Что я не могу сделать, так это часть расчета денег. Все работает нормально, пока денежный калькулятор не превратится в 00998 евро, и ему придется добавить 1 евро к переменной евро и изменить центы на 0. Я хочу, чтобы он добавил 1 евро и не изменил центов на 0, когда центы равны 998 центов и снова начните добавлять центы, пока он не станет равным 998 и т. д. Но то, что мой код делает сейчас, - это когда центы равны 998 центам, он начинает добавлять больше евро, чем 1, и вся этикетка начинает дрожать.
import tkinter as tk
import tkinter.font as font
import time
euro = 0
cent = 0
hcent = 0
salaris = (7.2/3600)
class Timer:
def __init__(self):
self.root = tk.Tk()
self.text_variabel = tk.StringVar()
self.root.geometry('455x300')
self.root.resizable(False,False)
self.root.configure(bg='lightgreen')
self.start_tijd = None
self.is_running = False
self.make_widgets()
self.root.bind('<Return>', self.startstop)
self.root.mainloop()
def make_widgets(self):
tk.Label(self.root, textvariable=self.text_variabel, font='ariel 30', fg='white', bg='lightgreen').pack()
#tk.Label(self.root, textvariable=self.text_variabel, font='ariel 15', fg='green', bg='black').pack()
btn_frame = tk.Frame(self.root)
btn_frame.pack()
tk.Button(btn_frame, text='Start', command=self.start, font=font.Font(size=25, family='Helvetica'), width=6).pack(side=tk.LEFT)
tk.Button(btn_frame, text='Stop', command=self.stop, font=font.Font(size=25, family='Helvetica'), width=6).pack(side=tk.RIGHT)
def start(self):
if not self.is_running:
self.start_tijd = time.time()
self.timer()
#self.money()
self.is_running = True
def timer(self):
self.text_variabel.set(self.format_time(time.time() - self.start_tijd))
self.after_loop = self.root.after(50, self.timer)
def stop(self):
if self.is_running:
self.root.after_cancel(self.after_loop)
self.is_running = False
def startstop(self, event=None):
if self.is_running:
self.stop()
else:
self.start()
@staticmethod
def format_time(elap):
global cent, hcent, euro, salaris
hours = int(elap / 3600)
minutes = int(elap / 60 - hours * 60.0)
seconds = int(elap - hours * 3600.0 - minutes * 60.0)
hseconds = int((elap - hours * 3600.0 - minutes * 60.0 - seconds) * 10)
#euro = int(0)
#secondes_grens = 10 or 20 or 30 or 50 or 59
#cent = int(0)
#hcent = (seconds * salaris)*1000
ksalaris = salaris * 1000
while True:
if cent <=996:
cent = (seconds * ksalaris) + (minutes * ksalaris)*60 + (hours * ksalaris)*3600
#elif hours > 0 and seconds == 0:
#elif hours ==1:
# cent = (hours * salaris)*100000
#elif hours > 0 and seconds > 0:
# cent = (seconds * salaris)*1000 + (hours * salaris)*100000
else:
euro = euro + 1
cent = 0
return '%02d:%02d:%02d:%1d' % (hours, minutes, seconds, hseconds), '€%02d,%03d' % (euro, cent)
Timer()
2 ответа
Вы забываете, что между первой минутой и первым часом много минут.
Вам нужны все эти if
предложения? Или у вас может быть простой аккумулятор секунд, минут, часов?
ksalaris = salaris * 1000
while True:
if cent <= 996:
cent = (seconds * ksalaris) + (minutes * ksalaris)*60 + (hours * ksalaris)*3600
else:
euro = euro + 1
cent = 0
Либо разделите результат на составные части (требуется import math
):
cents = (seconds * ksalaris) + (minutes * ksalaris)*60 + (hours * ksalaris)*3600
cent, euro = math.modf(cents)
cent = int(cent*1000)
return '%02d:%02d:%02d:%1d' % (hours, minutes, seconds, hseconds), '€%02d,%03d' % (euro, cent)
Или
используйте форматирование с плавающей запятой (возможно, вам придется объявить языковой стандарт, чтобы получить (запятую) в качестве разделителя.
cents = (seconds * ksalaris) + (minutes * ksalaris)*60 + (hours * ksalaris)*3600
return '%02d:%02d:%02d:%1d' % (hours, minutes, seconds, hseconds), '€%05.3f' % (cents)
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.