LINUX.ORG.RU

Tkinter - как подружить window.overrideredirect(1) и window.lower() в Python?

 


0

1

import tkinter as tk
import urllib.request
import gc

def get_rates():
    try:
        rates = []
        urls = [
            "https://api.coingate.com/v2/rates/merchant/USD/RUB",
            "https://api.coingate.com/v2/rates/merchant/EUR/RUB",
            "https://api.coingate.com/v2/rates/merchant/EUR/USD",
        ]
        for url in urls:
            rate = urllib.request.urlopen(url).read().decode()
            rates.append(f"{float(rate):0>5.2f}")
        return rates
    except:
        return ["--.--", "--.--", "--.--"]


window = tk.Tk()
window.title("")
window.overrideredirect(1)
window.geometry("-50+100")
window.resizable(0,0)
#window.lower()



rate_usd_rub, rate_eur_rub, rate_eur_usd = tk.StringVar(), tk.StringVar(), tk.StringVar()


font = ("Arial", 12, "normal")
fg = "#4D4D4D"

tk.Label(window, text="USD / RUB: ", font=font, fg=fg).grid(row=0, column=0)
tk.Label(window, textvariable=rate_usd_rub, font=font, fg=fg).grid(row=0, column=1)
tk.Label(window, text="EUR / RUB: ", font=font, fg=fg).grid(row=1, column=0)
tk.Label(window, textvariable=rate_eur_rub, font=font, fg=fg).grid(row=1, column=1)
tk.Label(window, text="EUR / USD: ", font=font, fg=fg).grid(row=2, column=0)
tk.Label(window, textvariable=rate_eur_usd, font=font, fg=fg).grid(row=2, column=1)


def update_rates():
    new_rates = get_rates()
    rate_usd_rub.set(new_rates[0])
    rate_eur_rub.set(new_rates[1])
    rate_eur_usd.set(new_rates[2])
    window.after(60000, update_rates)
    gc.collect()

update_rates()
window.mainloop()


Ответ на: комментарий от MKuznetsov

Спасибо! Тоже закралось такое предположение, но хотелось закрыть гештальт.

Скажите, а это в порядке вещей, что код из нескольких строк (хоть это и Python) после компиляции весит 10 MB и при запуске занимает оперативной памяти 30 MB? Как можно уменьшить размер и занимаемый объем памяти?

LinuX
() автор топика
Ответ на: комментарий от LinuX

(хоть это и Python) после компиляции

давайте только слово «компиляция» ставить в кавычечьки..

tkinter вместе со всеми зависимостями весит 5Mb. Если их всех укладываешь в один бинарь, то меньше 5 он весить не может. Плюс питоновский рантайм и библиотеки. То есть да - «скомпилированный» скрипт питон так и весит около 10-ки.

а то сжирает 30 - это чудеса питона. tkinter тут не при делах, он маленький

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

Спасибо за подробное объяснение!

Кстати, осознал, что процедура «компиляции» под Linux лишена всякого смысла. Ведь на большинстве систем окружение будет примерно такое же.

LinuX
() автор топика
Последнее исправление: LinuX (всего исправлений: 1)
Ответ на: комментарий от LinuX

кстати для такой мелкой программы Python в общем-то и не нужен..

вы всё равно tkinter (сиречь tcl/tk) в основном дёргаете

уберите Python получится портабельное куда угодно приложение

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

#!/bin/bash

export LC_NUMERIC=ru_RU.UTF-8


get_rates() {

  rates=()
  urls=(
    "https://api.coingate.com/v2/rates/merchant/USD/RUB"
    "https://api.coingate.com/v2/rates/merchant/EUR/RUB"
    "https://api.coingate.com/v2/rates/merchant/EUR/USD"
  )


  for url in "${urls[@]}"; do
    rate=$(curl -s "$url")
    rates+=("$rate")
  done


  usd_rub=$(awk -F "." '{printf "%05.2f", $1 "." sprintf("%02d", $2)}' <<< "${rates[0]}")
  eur_rub=$(awk -F "." '{printf "%05.2f", $1 "." sprintf("%02d", $2)}' <<< "${rates[1]}")
  eur_usd=$(awk -F "." '{printf "%05.2f", $1 "." sprintf("%02d", $2)}' <<< "${rates[2]}")


  clear
  echo "USD / RUB: $usd_rub"
  echo "EUR / RUB: $eur_rub"
  echo "EUR / USD: $eur_usd"
}


while true; do
  get_rates
  sleep 60
done

LinuX
() автор топика
Ответ на: комментарий от MKuznetsov

Как выяснилось, api.coingate.com живет на своей особой волне.

Поэтому изначально нужно понять, где брать актуальные данные с moex (бесплатно они отдают их только с 15-ти минутной задержкой).

Но это уже совсем другая история. )

LinuX
() автор топика
Ответ на: комментарий от LinuX

где брать актуальные данные с moex

rest-api там разве с задержкой ? что-то от меня ускользнуло

а просто курсы можно потоком с какого-нить финам брать (или кто там сейчас живой). Или с любого терминала - набросать транслятор за день

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

Может я не разобрался до конца, но вроде да. Возможно, что зависит от секции.

По крайней мере, на самом сайте информация идет с задержкой: https://www.moex.com/ru/issue/EUR_RUB__TOM/CETS

Также они предлагают оформить подписку на биржевую информацию: https://www.moex.com/ru/products/personal https://www.moex.com/ru/orders

LinuX
() автор топика
Ответ на: комментарий от MKuznetsov

Вообще, мне привычнее смотреть: https://www.profinance.ru/quote_show.php

Реклама режется через uBlock Origin, аналитика там слабая, а вот посмотреть на всё сразу, чтобы понимать, что вообще происходит в мире - достаточно удобно.

Наверное, оттуда и буду брать данные.

LinuX
() автор топика