Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3495 posts.

Python для новичков » Заполнения налоговой декларации по доходам от иностранных компаний  » Июль 31, 2021 10:27:25

Здравствуйте, всем.

Пишу скрипт, который должен автоматически заполнять налоговую декларацию по доходам за пределами РФ.
Большая часть скрипт уже написана.
Когда нажимается “добавить источник” не получается найти элемент который раскрывает список, как найти формы в каждом новым источнике, чтобы заполнить их?

 import json
from bs4 import BeautifulSoup
import requests as req
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
import os, time, keyboard
def check(driver):
  url = driver.current_url
  time.sleep(2)
  try:
    response = req.get(url=url)
    print(f" {url} {response.status_code}")
    return 0
  except Exception as ex:
     check(driver)
path_to_extension=r"C:\Users\egor\chromedriver\92.0.4515.43\win32\public_services_1.2.8.0.crx"
options = Options()
options.add_experimental_option("excludeSwitches", ['enable-automation']) # убрать окно
# options.add_argument('--profile-directory=Profile 2')
# options.add_argument(r'--C:\Users\egor\chromedriver\92.0.4515.43\win32\public_services_1.2.8.0.crx')
options.add_extension(r'C:\Users\egor\chromedriver\92.0.4515.43\win32\public_services_1.2.8.0.crx')
options.add_argument("--incognito")
prefs = {'safebrowsing.enabled': True,
         "credentials_enable_service": False,
         "profile.password_manager_enabled" : False,
         # "select_file_dialogs.allowed": False,
         # "download.prompt_for_download": False,
         # "download.directory_upgrade": True,
         # "profile.default_content_setting_values.automatic_downloads": 1,
         # "download_restrictions": 0,
         # "profile.default_content_settings.popups": 0,
         "credentials_enable_service": False,
         "profile.password_manager_enabled": False
         }
options.add_experimental_option("prefs", prefs)
# options.add_argument('--disable-extensions')
options.add_argument('--disable-infobars')
options.add_argument('--safebrowsing-disable-extension-blacklist')
options.add_argument('--safebrowsing-disable-download-protection')
with open("password.json", "r") as json_file:
  a = json.load(json_file)
  user = a["gos"]["user_name"]
  password_for_gos =a["gos"]["password"]
try:
  
  driver = webdriver.Chrome(r'C:\Users\egor\chromedriver\92.0.4515.43\win32\chromedriver.exe', options=options)
  driver.get("https://lkfl2.nalog.ru/lkfl/login")
  while 1:
    time.sleep(1)
    try:
      if driver.find_element_by_class_name("form_link"):
         p= driver.find_elements_by_class_name("form_link")
         p[1].click()#вход на госуслуги.
         break
    except:
      if driver.find_element_by_class_name("popup_close"):
        driver.find_element_by_class_name("popup_close").click()
      pass
  
  print("close")
  time.sleep(1)
  login_input = driver.find_element_by_id("login")
  login_input.clear()
  login_input.send_keys(user)
  password = driver.find_element_by_id("password")
  password.clear()
  password.send_keys(password_for_gos)
  driver.find_element_by_class_name("ufoPC-checkbox").click()# не запоминать пароль.
  check(driver)
  driver.find_element_by_class_name("ui-button").click()# вход в налоговой кабинет.
  check(driver)
  driver.find_element_by_class_name("menu__main").find_element_by_class_name("menu_link__report").click()
  check(driver)# жизненные ситуации
  driver.find_element_by_xpath("/html/body/div[1]/div/div[1]/div[3]/div/div[3]/div[1]/div/div/div[3]/div/div[2]/a").click()
  # 3 ндфл
  check(driver)
  driver.find_element_by_class_name("Button_button__blue__Ipe-v").click()# далее
  check(driver)
  driver.find_element_by_id("react-tabs-2").click()# за пределами РФ
  
  check(driver)
  p= driver.find_element_by_class_name("form_buttons")#добавить источник
  p.find_element_by_class_name("src-modules-Taps-components-NDFL3-private-forms-IncomesForm-IncomesOutsideRFComponent-IncomeSources-IncomeSources-module__addButton").click()
  check(driver)

Python для новичков » Програмное движение мышкой в играх » Июль 20, 2021 22:13:51

Для движения мышкой использую pyautogui.move, но в некоторых играх это не работает, есть ли варианты эмулировать движение мышкой прямо в окно или какие нибудь другие идеи на этот счёт? Заранее спасибо

Django » Как отредактировать поле файл объекта без формы??? » Июль 18, 2021 18:42:01

Создание объектов я реализовал через форму, редактирование я реализовал без формы, почти всё работает, удаётся отредактировать Текст вопроса и Ответ на вопрос, но не фото прикреплённое к вопросу. При изменении фото в консоль выводится None, хотя я его прикреплял. Что мне исправить?
это models.py
 class Test(models.Model):
    name=models.CharField('Имя теста',max_length=300)
    author=models.ForeignKey(User,on_delete=models.CASCADE,verbose_name='Автор')
def questionimg_directory_path(instance, filename):
    return 'Question/foto/test_{0}/{1}'.format(instance.test.id, filename)
class Question(models.Model):
    test=models.ForeignKey(Test,on_delete=models.CASCADE,verbose_name='тест',null=True,blank=True)
    question=models.TextField(verbose_name="Текст вопроса")
    answer=models.TextField(verbose_name="Ответ на вопрос")
    img=models.FileField('Фото',upload_to=questionimg_directory_path,null=True,blank=True)
это urls.py
 from django.contrib import admin
from django.urls import path
from core import views
app_name='core'
urlpatterns = [
    path('test/<int:id>/edit_question/<int:id1>/edit_par_question', views.edit_par_question, name='edit_par_question'),
    path('test/<int:id>', views.test, name='test'),
]
это views.py
 def edit_question(request,id,id1):
    test=Test.objects.get(id=id)
    que=Question.objects.get(id=id1)
    context={
    'test':test,
    'que':que,
    }
    template='test.html'
    return render(request,template,context)
def edit_par_question(request,id,id1):
    te=Test.objects.get(id=id)
    que=Question.objects.get(id=id1)
    if request.method=='POST':
        if te.author==request.user:
            que.question=request.POST.get("question")
            que.answer=request.POST.get("answer")
            que.img=request.POST.get("img")
            print(request.POST.get("img"))# выводит None
            que.save()
    return HttpResponseRedirect(reverse('core:test',args=(te.id,)))
это test.html
 <form method="post" action="{%url 'core:edit_par_question' test.id que.id%}" enctype="multipart/form-data">
       {% csrf_token %}
       <label>Текст вопроса:</label>
       <input type="text" name="question" value="{{que.question}}" class="form-control"/>
      <label>Ответ на вопрос:</label>
    <input type="text" name="answer" value="{{que.answer}}" class="form-control"/>
    <label>Фото:</label>
    {%if que.img%}На данный момент {{que.img.url}}<br>{%endif%}
    <input type="file" name="img" value="{{que.img}}" class="form-control"/>
    <button type="submit" class="btn btn-primary">Изменить</button>
       </form>

Python для новичков » Не работает pip, не могу скачать никакие пакеты » Июль 14, 2021 14:46:20

Питон 3.9.6, пип 21.1.3
При попытке установить любой пакет ошибка:

 (venv) C:\Users\s.naumkin\Desktop\HAKKO Connect>pip install pyodbc
ERROR: Exception:
Traceback (most recent call last):
  File "c:\users\s.naumkin\desktop\hakko connect\venv\lib\site-packages\pip\_internal\cli\base_command.py", line 180, in _main
    status = self.run(options, args)
  File "c:\users\s.naumkin\desktop\hakko connect\venv\lib\site-packages\pip\_vendor\urllib3\connection.py", line 500, in _connect_tls_proxy
    return ssl_wrap_socket(
  File "c:\users\s.naumkin\desktop\hakko connect\venv\lib\site-packages\pip\_vendor\urllib3\util\ssl_.py", line 432, in ssl_wrap_socket
    ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls)
  File "c:\users\s.naumkin\desktop\hakko connect\venv\lib\site-packages\pip\_vendor\urllib3\util\ssl_.py", line 474, in _ssl_wrap_socket_impl
    return ssl_context.wrap_socket(sock)
  File "C:\Users\s.naumkin\AppData\Local\Programs\Python\Python39\lib\ssl.py", line 500, in wrap_socket
    return self.sslsocket_class._create(
  File "C:\Users\s.naumkin\AppData\Local\Programs\Python\Python39\lib\ssl.py", line 997, in _create
    raise ValueError("check_hostname requires server_hostname")
ValueError: check_hostname requires server_hostname

Нагуглил, что ошибка может быть в библиотеке urllib3, сделал ей даунгрейд. Теперь появляется новая ошибка:
 C:\Users\s.naumkin>pip install pyodbc
WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1129)'))': /simple/pyodbc/
WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1129)'))': /simple/pyodbc/
WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1129)'))': /simple/pyodbc/
WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1129)'))': /simple/pyodbc/
WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1129)'))': /simple/pyodbc/
Could not fetch URL https://pypi.org/simple/pyodbc/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pyodbc/ (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1129)'))) - skipping
ERROR: Could not find a version that satisfies the requirement pyodbc (from versions: none)
ERROR: No matching distribution found for pyodbc
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1129)'))) - skipping

Пробовал так pip –trusted-host pypi.org install pyodbc
Пробовал так pip –proxy https://user:pass@192.168.1.200:8080 install pyodbc

Все одна ошибка. На домашнем компе все работает отлично с такими же версиями и питона и пипа.
Пробовал поднять ВПН до домашнего компа с перенаправлением всего трафика, все равно не работает. Прогуглил уже почти все. Нигде не могу найти решения.

Python для новичков » Голосовой помошник » Июль 14, 2021 00:59:11

Приветствую, начал изучать python, не бейте палками, я в нём полный ноль. Пытаюсь создать что-то вроде голосового помощника, хочу чтобы он запускался только при произнесении определённой фразы, но он почему-то скипает этот блок. Подскажите пожалуйста, как пофиксить?


import speech_recognition as sr
import random
import time
from playsound import playsound
import speech_recognition as sr


#######################################

playsound('start.mp3')
def cod(message):
message = message.lower()
if message == ‘чимеге’:
playsound('final.mp3')
else:
exit()

#######################################


def listen_command():
r = sr.Recognizer()
with sr.Microphone() as source:
print(“Скажите вашу команду: ”)
audio = r.listen(source)

try:
our_speech = r.recognize_google(audio, language=“ru”)
print(“Вы сказали: ”+our_speech)
return our_speech
except sr.UnknownValueError:
return “ошибка”
except sr.RequestError:
return “ошибка”

def do_this_command(message):
message = message.lower()
if message == ‘привет’:
playsound('again.mp3')

elif message == ‘пока’:
playsound('goodbye.mp3')
exit()

#elif message == ‘как дела’:
# playsound('fr.mp3')

elif message == ‘расскажи анекдот’:
playsound('joke.mp3')

else:
playsound('can_not.mp3')

if __name__ == ‘__main__’:
while True:
command = listen_command()
do_this_command(command)

Python для новичков » Интеграция Active Directory с чат-ботом telegram » Июль 12, 2021 17:13:23

Добрый день! Мне требуется интегрировать чат-бот в telegram с AD в нашей компании, чтобы при вводе фамилии и имени подтягивались остальные данные о сотруднике. Ничего не могу найти похожее. Может кто-то занимался или может наталкивался на статью/документацию. Буду очень благодарен)))

Python для новичков » Коллизия круга и прямоугольного объекта » Июнь 28, 2021 13:20:10

Есть два объекта:
 @dataclass
class Circle:
    x: float
    y: float
    radius: float
    vx: float
    vy: float
@dataclass
class Rectangle:
    left: float
    top: float
    widt: float
    height: float
Задача: обнаружить коллизию между двумя объектами и определить новый вектор движения круга
Я попробовал использовать хитбоксы, но проблема появляется, когда круг сталкивается об угол прямоугольника, и тогда он ведет себя непредсказуемо (fps 60, код обработки тика):
 unit = Circle(.....)
rect = Rectangle(...)
g = 0.3
while 1:
    for (x, y) in [(unit.x - unit.radius, unit.y - unit.radius), (unit.x + unit.radius, unit.y + unit.radius),
    (unit.x + unit.radius, unit.y - unit.radius), (unit.x - unit.radius, unit.y + unit.radius)]:
        if rect.left <= x <= rect.left + rect.width and rect.top <= y <= rect.top + rect.height:
            if y < rect.top or y > rect.top + rect.height:
                unit.vy = -unit.vy * 0.7  # коэффициент восстановления
            if x < rect.left or x > rect.left + rect.widtht:  # мог тоже использовать двойное неравенство, забыл
                unit.vx = -unit.vx * 0.7        
    unit.x += unit.vx
    unit.y += unit.vy
    time.sleep(1 / 60)
    unit.vy += g   # писал код прямо тут, так что могут быть проблемы с синтаксисом
И вот с этим кодом он начинает лететь не туда, когда ударяется об угол, halp plz

Python для экспертов » np.cov » Июнь 26, 2021 08:31:14

Здравствуйте. Не могу понять логику работы функции numpy.cov

Такой код
a = np.array(((1,2,3,4),(1,2,3,4))) #Скобки на самом деле квадратные, это список. Почему-то на форуме они не прописываются.
Res = np.cov(a)
print(Res)

вернет вот что ( та же беда с квадратными скобками, поэтому вместо квадратных круглые):
((1.66666667 1.66666667)
(1.66666667 1.66666667))

Что странно. Казалось бы должно быть:

((1-2.25)^2 + (2 - 2.25)^2 + (3-2.25)^2 + (4 - 2.25)^2)/4 = 1.25 для каждого элемента матрицы.

Причем cov(a.T) вернет тот же результат.
Может кто-то объяснить, почему так получается?

Python для новичков » Плавающая ошибка при передаче данных GET-запросом на сайт. Помогите понять где ошибка! » Июнь 24, 2021 13:59:51

Доброго времени суток! Я сравнительно новичок в питоне, но старательно учусь и параллельно пилю свой маленький проект “умного дома”(для себя). Столкнулся с проблемой: у меня на бесплатном PHP хостинге есть скрипт, который принимает данные из GET-запроса и записывает их в файл. GET-запрос я передаю скрипту через requests.get() с параметрами, которые берутся из глобальных переменных. requests.get находится в потоке и блокирует доступ к переменным Rlock, когда с ними работает. Также есть к этим переменным доступ из других потоков (тоже с RLock) для их считывания или обновления. Собственно вопрос: все работает нормально какое-то время, данные отправляются и пишутся в файлы на хостинге, но потом почему-то начинают отправляться GET-запросы без данных. Почему так происходит? Могут ли другие потоки как-то блокировать/переблокировать RLock? При этом ошибок программа не выдает. Прошу сильно не пинать - я самоучка и мне уже далеко не 20 лет, так что мозги могут соображать не так быстро как у молодежи или профессиональных программистов.Заранее спасибо.
Собственно файл с функцией start1 в которой и формируется и отправляется GET-запрос.
 import threading
from threading import Thread
from time import sleep
import requests
from package1_copy import Variables
lock = threading.RLock()
def start1():
   lock.acquire()
   try:
    r4_0 = Variables.parsing_GPIO_4relay1
    r4_1 = str(r4_0[0])
    r4_2 = str(r4_0[1])
    r4_3 = str(r4_0[2])
    r4_4 = str(r4_0[3])
    params = {'params': str(Variables.parsing_ESP1),
              'params1': str(Variables.Sadok_Light1),
              'params2_1': r4_1,
              'params2_2': r4_2,
              'params2_3': r4_3,
              'params2_4': r4_4, 'control': 'home'}
    r = requests.get('http://some_site/index.php', params=params)
    r.encoding = "UTF8"
    print('start1 = Ok')
    print(r.text)
   except:
    params = {'params': '0', 'params1': '0', 'params2_1': '0', 'params2_2': '0', 'params2_3': '0', 'params2_4': '0', 'control': 'home'}
    r = requests.get('http://some_site/index.php', params=params)
    r.encoding = "UTF8"
    print('except start1' + r.text)
    pass
   finally:
       lock.release()
   sleep(60.0)
   start1()
def start2():
  global lines
  lock.acquire()
  try:
    url = "http://some_site/hello.html"
    r = requests.get(url)
    r.encoding = "UTF8"
    print('start2 = Ok')
    with open('response_server.html', 'w') as output_file:
      output_file.write(r.text)
    with open('response_server.txt', 'w') as output_file:
      output_file.write(r.text)
    text_file = open("response_server.html", "r")
    lines = text_file.read().split(',')
    print(lines)
    # print(len(lines))
    text_file.close()
    Variables.receive_from_server = lines
    Variables.receive_from_server1 = lines[0]
    Variables.receive_from_server1 = lines[1]
    Variables.receive_from_server1 = lines[2]
    Variables.receive_from_server1 = lines[3]
    Variables.receive_from_server1 = lines[4]
    Variables.receive_from_server1 = lines[5]
    Variables.receive_from_server1 = lines[6]
  except:
    lines.append('0')
    pass
  finally:
      lock.release()
  sleep(70.0)
  start2()
  return lines
def parsing_ESP():
  lock.acquire()
  try:
    url = "http://192.168.0.110/sensors/adci1/"
    r = requests.get(url)
    r.encoding = "UTF8"
    # print('r.text= ' + r.text)
    with open('test.html', 'w') as output_file:
      output_file.write(r.text)
    with open('test1.txt', 'w') as output_file:
      output_file.write(r.text)
    f = open('test1.txt')
    str1=f.read()
    f.close()
    str2=str1[str1.find(";") + 1 : ]
    str3=str2[str2.find(":") + 1 : str2.find(";")]
    Variables.parsing_ESP = int(str3)
    Variables.parsing_ESP1 = int(str3)
    print('parsing_ESP = Ok')
  except:
    url= 'http://192.168.0.110/configrst?st=1'
    r.request.get(url)
    str3=110
    Variables.parsing_ESP = int(str3)
    Variables.parsing_ESP1 = int(str3)
    pass
  finally:
      lock.release()
  sleep(60.0)
  parsing_ESP()
  return str3
def parsing_GPIO_Sadok():
  lock.acquire()
  try:
    url = "http://192.168.0.100/gpioprint"
    r = requests.get(url)
    r.encoding = "UTF8"
    with open('sadok.html', 'w') as output_file:
      output_file.write(r.text)
    with open('sadok1.txt', 'w') as output_file:
      output_file.write(r.text)
    f = open('sadok1.txt')
    str_sad = f.read()
    # print(str_sad)
    f.close()
    str_sad2 = str_sad[:str_sad.find(";") + 1]
    str_sad3 = str_sad2[str_sad2.find(":") + 1: str_sad2.find(";")]
    Variables.Sadok_Light=str_sad3
    Variables.Sadok_Light1 = str_sad3
    print('parsing_GPIO_Sadok = Ok ')
  except:
    str_sad3=1
    Variables.Sadok_Light = str_sad3
    Variables.Sadok_Light1 = str_sad3
    pass
  finally:
      lock.release()
  sleep(30.0)
  parsing_GPIO_Sadok()
  return str_sad3
def parsing_GPIO_4relay11():
  lock.acquire()
  try:
    url = "http://192.168.0.120/gpioprint"
    r = requests.get(url)
    r.encoding = "UTF8"
    with open('4relay.txt', 'w') as output_file:
     output_file.write(r.text)
    f = open('4relay.txt')
    str_4relay = f.read()
    f.close()
    print('parsing_GPIO_4relay = Ok')
    str_4relay2 = str_4relay[str_4relay.find(":") + 1:]
    r1 = str_4relay2[: str_4relay2.find(";")]
    r2 = str_4relay[10:11]
    r3 = str_4relay[18:19]
    r4 = str_4relay[23:24]
    relay_list = [r1, r2, r3, r4]
    Variables.parsing_GPIO_4relay = relay_list
    Variables.parsing_GPIO_4relay1 = relay_list
    print('Variables.parsing_GPIO_4relay =' + str(Variables.parsing_GPIO_4relay))
  except:
      r1 = '0'
      r2 = '0'
      r3 = '0'
      r4 = '0'
      relay_list = [r1, r2, r3, r4]
      Variables.parsing_GPIO_4relay = relay_list
      print('Variables.parsing_GPIO_4relay =' + str(Variables.parsing_GPIO_4relay))
      pass
  finally:
      lock.release()
  sleep(30.0)
  parsing_GPIO_4relay11()
  return relay_list

Другой файл с другими функциями в потоках, которые обращаются к тем же глобальным переменным:
 import threading
from threading import Thread
from time import sleep
import requests
from package1_copy import Variables
lock = threading.RLock()
def logicks_Sadok_Light():
       lock.acquire()
       try:
           if int(Variables.parsing_ESP) <=100:
              url= Variables.GPIO_sad_on
              requests.get(url)
              print('Night street')
           else:
               url = Variables.GPIO_sad_off
               requests.get(url)
               print('Day street!')
       except:
           pass
       finally:
           lock.release()
def logicks_4relay_Light():
    lock.acquire()
    try:
        if int(Variables.parsing_ESP) <= 100:
            url = Variables.GPIO_4relay1_on
            requests.get(url)
            url = Variables.GPIO_4relay2_on
            requests.get(url)
            url = Variables.GPIO_4relay3_on
            requests.get(url)
            url = Variables.GPIO_4relay4_on
            requests.get(url)
            print('4Relay Night')
        else:
            url = Variables.GPIO_4relay1_off
            requests.get(url)
            url = Variables.GPIO_4relay2_off
            requests.get(url)
            url = Variables.GPIO_4relay3_off
            requests.get(url)
            url = Variables.GPIO_4relay4_off
            requests.get(url)
            print('4 Relay Day!')
    except:
        print('Except!')
        pass
    finally:
        lock.release()
def remote_control_install():
    lock.acquire()
    try:
        logicks_Sadok_Light()
        logicks_4relay_Light()
    finally:
        lock.release()
        pass
    sleep(10.0)
    remote_control_install()

Файл с переменными:
 send_to_server = ''
receive_from_server = []
receive_from_server1 = 0
receive_from_server2 = 0
receive_from_server3 = 0
receive_from_server4 = 0
receive_from_server5 = 0
receive_from_server6 = 0
receive_from_server7 = 'home'
Sadok_Light = 1
parsing_ESP = 110
r1 = '0'
r2 = '0'
r3 = '0'
r4 = '0'
parsing_GPIO_4relay = [r1, r2, r3, r4]
GPIO_sad_on = 'http://192.168.0.100/gpio?st=0&pin=0'
GPIO_sad_off = 'http://192.168.0.100/gpio?st=1&pin=0'
GPIO_4relay1_on = 'http://192.168.0.120/gpio?st=1&pin=0'
GPIO_4relay1_off = 'http://192.168.0.120/gpio?st=0&pin=0'
GPIO_4relay2_on = 'http://192.168.0.120/gpio?st=1&pin=2'
GPIO_4relay2_off = 'http://192.168.0.120/gpio?st=0&pin=2'
GPIO_4relay3_on = 'http://192.168.0.120/gpio?st=1&pin=5'
GPIO_4relay3_off = 'http://192.168.0.120/gpio?st=0&pin=5'
GPIO_4relay4_on = 'http://192.168.0.120/gpio?st=1&pin=14'
GPIO_4relay4_off = 'http://192.168.0.120/gpio?st=0&pin=14'
response_flag = ['0', '0', '0', '0', '0', '0', 'sleep']
response_flag_1 = ''
response_flag_2 = ''
response_flag_3 = ''
response_flag_4 = ''
response_flag_5 = ''
response_flag_6 = ''
response_flag_7 = ''
parsing_ESP1 = 110
parsing_GPIO_4relay1 = [r1, r2, r3, r4]
Sadok_Light1 = 1

И на всякий случай файл GUI:

 import ctypes
import time
from ctypes import wintypes
from threading import Thread
from tkinter import *
import requests
import logic_center
from package1_copy import Variables
from package1_copy.Stream_2 import start2, start1, parsing_ESP, parsing_GPIO_Sadok, parsing_GPIO_4relay11
def start_frame():
    frame_tumblers1_frame.place_forget()
    frame_tumblers2_frame.place_forget()
    frame_tumblers3_frame.place_forget()
    frame_tumblers_frame.place(x=18, y=225, width=765, height=355)
    print('def_start')
def general_menu(*event):
    frame_tumblers1_frame.place_forget()
    frame_tumblers2_frame.place_forget()
    frame_tumblers3_frame.place_forget()
    frame_tumblers_frame.place(x=18, y=225, width=765, height=355)
    print('def1')
def overview(*event):
    frame_tumblers_frame.place_forget()
    frame_tumblers2_frame.place_forget()
    frame_tumblers3_frame.place_forget()
    frame_tumblers1_frame.place(x=18, y=225, width=765, height=355)
    print('def2')
def settings(*event):
    frame_tumblers_frame.place_forget()
    frame_tumblers1_frame.place_forget()
    frame_tumblers3_frame.place_forget()
    frame_tumblers2_frame.place(x=18, y=225, width=765, height=355)
    print('def3')
def reserved(*event):
    frame_tumblers_frame.place_forget()
    frame_tumblers1_frame.place_forget()
    frame_tumblers2_frame.place_forget()
    frame_tumblers3_frame.place(x=18, y=225, width=765, height=355)
    print('def4')
def setwindow(root):
    root.title("Окно программы")
    root.resizable(False, False)
    w = 800
    h = 600
    ws = root.winfo_screenwidth()
    wh = root.winfo_screenheight()
    x = int(ws / 2 - w / 2)
    y = int(wh / 2 - h / 2)
    root.geometry("{0}x{1}+{2}+{3}".format(w, h, x, y))
def check_Power():
    class SYSTEM_POWER_STATUS(ctypes.Structure):
        _fields_ = [
            ('ACLineStatus', wintypes.BYTE),
            ('BatteryFlag', wintypes.BYTE),
            ('BatteryLifePercent', wintypes.BYTE),
            ('Reserved1', wintypes.BYTE),
            ('BatteryLifeTime', wintypes.DWORD),
            ('BatteryFullLifeTime', wintypes.DWORD),
        ]
    SYSTEM_POWER_STATUS_P = ctypes.POINTER(SYSTEM_POWER_STATUS)
    GetSystemPowerStatus = ctypes.windll.kernel32.GetSystemPowerStatus
    GetSystemPowerStatus.argtypes = [SYSTEM_POWER_STATUS_P]
    GetSystemPowerStatus.restype = wintypes.BOOL
    status = SYSTEM_POWER_STATUS()
    if not GetSystemPowerStatus(ctypes.pointer(status)):
        raise ctypes.WinError()
    if status.ACLineStatus != 0:
        # print('Power Ok!')
        lbl_Power_sensor['text'] = 'Power sensor status: AC power connected, Ok'
    else:
        # print('No Power')
        lbl_Power_sensor['text'] = 'Power sensor status: AC power lost, Battery mode!'
    # print('ACLineStatus', status.ACLineStatus)
    # print('BatteryFlag', status.BatteryFlag)
    # print('BatteryLifePercent', status.BatteryLifePercent)
    # print('BatteryLifeTime', status.BatteryLifeTime)
    # print('BatteryFullLifeTime', status.BatteryFullLifeTime)
    root.after(30000, check_Power)
def xxx():
    try:
        xxx1 = Variables.parsing_ESP
        lbl_gen_fr_1_value['text'] = xxx1
        lbl_gen_fr_2_value['text'] = xxx1
        root.after(3000, xxx)
    except:
        lbl_gen_fr_1_value['text'] = 'Fucking ERROR!!!'
        pass
        root.after(3000, xxx)
def parser_GPIO_sadok():
    try:
        r = requests.get('http://192.168.0.100/')
        if r.status_code == 200:
            # parsing_server1.parsing_GPIO_Sadok()
            xxx1 = Variables.Sadok_Light
                # parsing_server1.parsing_GPIO_Sadok()
            if int(xxx1) == 0:
                lbl_gen_fr3_1_value['text'] = 'ON'
            else:
                lbl_gen_fr3_1_value['text'] = "OFF"
        else:
            lbl_gen_fr3_1_value['text'] = 'ERROR'
        root.after(5000, parser_GPIO_sadok)
    except:
        lbl_gen_fr3_1_value['text'] = 'No connect to ESP!'
        pass
        root.after(5000, parser_GPIO_sadok)
def parser_GPIO_4relay():
    try:
        r = requests.get('http://192.168.0.120/')
        if r.status_code == 200:
            xxx1 = Variables.parsing_GPIO_4relay
            # parsing_server1.parsing_GPIO_4relay()
            if int(xxx1[0]) != 0:
                lbl_gen_fr3_3_value['text'] = 'ON'
            else:
                lbl_gen_fr3_3_value['text'] = "OFF"
            if int(xxx1[1]) != 0:
                lbl_gen_fr3_4_value['text'] = 'ON'
            else:
                lbl_gen_fr3_4_value['text'] = "OFF"
            if int(xxx1[2]) != 0:
                lbl_gen_fr3_5_value['text'] = 'ON'
            else:
                lbl_gen_fr3_5_value['text'] = "OFF"
            if int(xxx1[3]) != 0:
                lbl_gen_fr3_6_value['text'] = 'ON'
            else:
                lbl_gen_fr3_6_value['text'] = "OFF"
        else:
            lbl_gen_fr3_3_value['text'] = 'ERROR'
            lbl_gen_fr3_4_value['text'] = 'ERROR'
            lbl_gen_fr3_5_value['text'] = 'ERROR'
            lbl_gen_fr3_6_value['text'] = 'ERROR'
        root.after(10000, parser_GPIO_4relay)
    except:
        lbl_gen_fr3_3_value['text'] = 'Fucking ERROR!!!'
        lbl_gen_fr3_4_value['text'] = 'Fucking ERROR!!!'
        lbl_gen_fr3_5_value['text'] = 'Fucking ERROR!!!'
        lbl_gen_fr3_6_value['text'] = 'Fucking ERROR!!!'
        pass
        root.after(10000, parser_GPIO_4relay)
def check_req():
    try:
        r = requests.get('https://google.com/')  # резервный ('http://httpbin.org/get')
        print('google.com ' + str(r.status_code))
        if int(r.status_code) == 200:
            lbl_Internet_sensor['text'] = 'Internet sensor status: Connected, Ok'
        else:
            lbl_Internet_sensor['text'] = 'Internet sensor status: Disconnected, Error!'
        root.after(300000, check_req)
    except:
        print('except! Internet')
        lbl_Internet_sensor['text'] = 'Internet sensor status: Error!'
        pass
        root.after(300000, check_req)
def check_Light_sensor_conections():
    try:
        rl = requests.get('http://192.168.0.110/')
        print('status_code Light_sensor_connection: ' + str(rl.status_code))
        if int(rl.status_code) == 200:
            # root.after(0, xxx)
            lbl_Light_sensor['text'] = 'Light sensor status: Connected, Ok'
        else:
            lbl_Light_sensor['text'] = 'Light sensor status: Disconnected, Error!'
        root.after(600000, check_Light_sensor_conections)
    except:
        print('except! Light sensor')
        lbl_Light_sensor['text'] = 'Light sensor status: Error!'
        pass
        root.after(600000, check_Light_sensor_conections)
def check_Server_sensor_conections():
    try:
        rg = requests.get("http://f0555107.xsph.ru/")  # резервный ('http://httpbin.org/get')
        print('check server ' + str(rg.status_code))
        if int(rg.status_code) == 200:
            lbl_Server_sensor['text'] = 'Server sensor status: Connected, Ok'
        else:
            lbl_Server_sensor['text'] = 'Server sensor status: Disconnected, Error!'
    except:
        print('except! Server')
        lbl_Server_sensor['text'] = 'Server sensor status: Error!'
        pass
    root.after(600000, check_Server_sensor_conections)
def update_time():
    # change text on Label
    lbl_time['text'] = time.strftime('Current date: %Y-%m-%d Current time: %H:%M:%S')
    # run `update_time` again after 1000ms (1s)
    root.after(1000, update_time)  # function name without ()
root = Tk()
setwindow(root)
frame_main_frame = Frame(master=root, relief=GROOVE, borderwidth=5, bg='#0c47a6')
frame_sensor_frame = Frame(master=frame_main_frame, relief=GROOVE, borderwidth=5, bg='#0f80f2')
frame_tumblers_frame = Frame(master=frame_main_frame, relief=GROOVE, borderwidth=5, bg='#a4aaab')
frame_general1 = Frame(master=frame_tumblers_frame, relief=GROOVE, borderwidth=5, bg='#a4aaab')
frame_general2 = Frame(master=frame_tumblers_frame, relief=GROOVE, borderwidth=5, bg='#a4aaab')
frame_general3 = Frame(master=frame_tumblers_frame, relief=GROOVE, borderwidth=5, bg='#a4aaab')
frame_tumblers1_frame = Frame(master=frame_main_frame, relief=GROOVE, borderwidth=5, bg='#a4aaab')
frame_tumblers2_frame = Frame(master=frame_main_frame, relief=GROOVE, borderwidth=5, bg='#a4aaab')
frame_tumblers3_frame = Frame(master=frame_main_frame, relief=GROOVE, borderwidth=5, bg='#a4aaab')
lbl_time = Label(master=frame_sensor_frame, text='Current time: 00:00:00', font="Tahoma 12", bg='#0f80f2')
lbl_time.pack()
lbl_connections = Label(master=frame_sensor_frame, text='Connections state', font="Tahoma 14", bg='#0f80f2')
lbl_connections.pack()
lbl_Power_sensor = Label(master=frame_sensor_frame, text='Power sensor status: Connected, Power on', font='Tahoma 10',
                         bg='#0f80f2')
lbl_Light_sensor = Label(master=frame_sensor_frame, text='Light sensor status: ', font='Tahoma 10', bg='#0f80f2')
lbl_Water_sensor = Label(master=frame_sensor_frame, text='Water sensor status: Connected, Ok', font='Tahoma 10',
                         bg='#0f80f2')
lbl_Gas_sensor = Label(master=frame_sensor_frame, text='Gas sensor status: Connected, Ok', font='Tahoma 10',
                       bg='#0f80f2')
lbl_Server_sensor = Label(master=frame_sensor_frame, text='Server sensor status: Connected, Ok', font='Tahoma 10',
                          bg='#0f80f2')
lbl_Internet_sensor = Label(master=frame_sensor_frame, text='Internet sensor status: ', font='Tahoma 10', bg='#0f80f2')
lbl_Power_sensor.pack()
lbl_Light_sensor.pack()
lbl_Water_sensor.pack()
lbl_Gas_sensor.pack()
lbl_Server_sensor.pack()
lbl_Internet_sensor.pack()
lbl_general = Label(master=frame_tumblers_frame, text='General', font="Tahoma 16", bg='#a4aaab')
lbl_general.pack()
lbl_gen_fr_1 = Label(master=frame_general1, text='Light sensor value', font="Tahoma 14", bg='#a4aaab')
lbl_gen_fr_1_value = Label(master=frame_general1, text='Unknown value', font="Tahoma 14", bg='White')
lbl_gen_fr_2 = Label(master=frame_general1, text='Light sensor2 value', font="Tahoma 14", bg='#a4aaab')
lbl_gen_fr_2_value = Label(master=frame_general1, text='Unknown value', font="Tahoma 14", bg='White')
lbl_gen_fr_3 = Label(master=frame_general1, text='Light sensor value', font="Tahoma 14", bg='#a4aaab')
lbl_gen_fr_3_value = Label(master=frame_general1, text='Unknown value', font="Tahoma 14", bg='White')
lbl_gen_fr_4 = Label(master=frame_general1, text='Light sensor value', font="Tahoma 14", bg='#a4aaab')
lbl_gen_fr_4_value = Label(master=frame_general1, text='Unknown value', font="Tahoma 14", bg='White')
lbl_gen_fr_5 = Label(master=frame_general1, text='Light sensor value', font="Tahoma 14", bg='#a4aaab')
lbl_gen_fr_5_value = Label(master=frame_general1, text='Unknown value', font="Tahoma 14", bg='White')
lbl_gen_fr_1.pack(pady=1)
lbl_gen_fr_1_value.pack(pady=1)
lbl_gen_fr_2.pack(pady=1)
lbl_gen_fr_2_value.pack(pady=1)
lbl_gen_fr_3.pack(pady=1)
lbl_gen_fr_3_value.pack(pady=1)
lbl_gen_fr_4.pack(pady=1)
lbl_gen_fr_4_value.pack(pady=1)
lbl_gen_fr_5.pack(pady=1)
lbl_gen_fr_5_value.pack(pady=1)
lbl_gen_fr2_1 = Label(master=frame_general2, text='selective control', font="Tahoma 14", bg='#a4aaab')
lbl_gen_fr2_1.place(x=45, y=20, width=150, height=25)
lbl_gen_fr2_2 = Label(master=frame_general2, text='street light control', font="Tahoma 14", bg='#a4aaab')
lbl_gen_fr2_2.place(x=42, y=95, height=25)
lbl_gen_fr2_3 = Label(master=frame_general2, text='input power control', font="Tahoma 14", bg='#a4aaab')
lbl_gen_fr2_3.place(x=35, y=174, height=25)
lbl_gen_fr2_4 = Label(master=frame_general2, text='control system', font="Tahoma 14", bg='#a4aaab')
lbl_gen_fr2_4.place(x=57, y=252, height=25)
lbl_gen_fr3_1 = Label(master=frame_general3, text='Relay sadok', font="Tahoma 12", bg='#a4aaab')
lbl_gen_fr3_1_value = Label(master=frame_general3, text='Unknown position', font="Tahoma 12", bg='White')
lbl_gen_fr3_2 = Label(master=frame_general3, text='Reley2', font="Tahoma 12", bg='#a4aaab')
lbl_gen_fr3_2_value = Label(master=frame_general3, text='Unknown position', font="Tahoma 12", bg='White')
lbl_gen_fr3_3 = Label(master=frame_general3, text='4 Reley 1', font="Tahoma 12", bg='#a4aaab')
lbl_gen_fr3_3_value = Label(master=frame_general3, text='Unknown position', font="Tahoma 12", bg='White')
lbl_gen_fr3_4 = Label(master=frame_general3, text='4 Reley 2', font="Tahoma 12", bg='#a4aaab')
lbl_gen_fr3_4_value = Label(master=frame_general3, text='Unknown position', font="Tahoma 12", bg='White')
lbl_gen_fr3_5 = Label(master=frame_general3, text='4 Reley 3', font="Tahoma 12", bg='#a4aaab')
lbl_gen_fr3_5_value = Label(master=frame_general3, text='Unknown position', font="Tahoma 12", bg='White')
lbl_gen_fr3_6 = Label(master=frame_general3, text='4 Reley 4', font="Tahoma 12", bg='#a4aaab')
lbl_gen_fr3_6_value = Label(master=frame_general3, text='Unknown position', font="Tahoma 12", bg='White')
lbl_gen_fr3_1.pack(pady=1)
lbl_gen_fr3_1_value.pack(pady=1)
lbl_gen_fr3_2.pack(pady=1)
lbl_gen_fr3_2_value.pack(pady=1)
lbl_gen_fr3_3.pack(pady=1)
lbl_gen_fr3_3_value.pack(pady=1)
lbl_gen_fr3_4.pack(pady=1)
lbl_gen_fr3_4_value.pack(pady=1)
lbl_gen_fr3_5.pack(pady=1)
lbl_gen_fr3_5_value.pack(pady=1)
lbl_gen_fr3_6.pack(pady=1)
lbl_gen_fr3_6_value.pack(pady=1)
lbl_overview = Label(master=frame_tumblers1_frame, text='Overview', font="Tahoma 16", bg='#a4aaab')
lbl_overview.pack()
lbl_settings = Label(master=frame_tumblers2_frame, text='Settings', font="Tahoma 16", bg='#a4aaab')
lbl_settings.pack()
lbl_settings_server_IP = Label(master=frame_tumblers2_frame, text='Server IP', font="Tahoma 14", bg='#a4aaab')
lbl_settings_server_IP.place(x=0, y=50)
ent_settings_server_ip = Entry(master=frame_tumblers2_frame, text='', font="Tahoma 14", bg='White', fg='Black')
ent_settings_server_ip.place(x=150, y=50)
lbl_settings_Internet_IP = Label(master=frame_tumblers2_frame, text='Internet IP', font="Tahoma 14", bg='#a4aaab')
lbl_settings_Internet_IP.place(x=0, y=90)
ent_settings_Internet_IP1 = Entry(master=frame_tumblers2_frame, text='', font="Tahoma 14", bg='White', fg='Black')
ent_settings_Internet_IP1.place(x=150, y=90)
lbl_settings_sensor1 = Label(master=frame_tumblers2_frame, text='Sensor Light IP', font="Tahoma 14", bg='#a4aaab')
lbl_settings_sensor1.place(x=0, y=130)
ent_settings_sensor1 = Entry(master=frame_tumblers2_frame, text='', font="Tahoma 14", bg='White', fg='Black')
ent_settings_sensor1.place(x=150, y=130)
lbl_settings_ESP1 = Label(master=frame_tumblers2_frame, text='ESP1 IP', font="Tahoma 14", bg='#a4aaab')
lbl_settings_ESP1.place(x=420, y=50)
ent_settings_ESP1 = Entry(master=frame_tumblers2_frame, text='', font="Tahoma 14", bg='White', fg='Black')
ent_settings_ESP1.place(x=540, y=50)
lbl_settings_ESP2 = Label(master=frame_tumblers2_frame, text='ESP2 IP', font="Tahoma 14", bg='#a4aaab')
lbl_settings_ESP2.place(x=420, y=90)
ent_settings_ESP2 = Entry(master=frame_tumblers2_frame, text='', font="Tahoma 14", bg='White', fg='Black')
ent_settings_ESP2.place(x=540, y=90)
lbl_settings_ESP3 = Label(master=frame_tumblers2_frame, text='ESP3 IP', font="Tahoma 14", bg='#a4aaab')
lbl_settings_ESP3.place(x=420, y=130)
ent_settings_ESP3 = Entry(master=frame_tumblers2_frame, text='', font="Tahoma 14", bg='White', fg='Black')
ent_settings_ESP3.place(x=540, y=130)
lbl_reserved = Label(master=frame_tumblers3_frame, text='Reserved', font="Tahoma 16", bg='#a4aaab')
lbl_reserved.pack()
button1 = Button(master=frame_main_frame, text="General", command=general_menu, bg="#adb2b8", fg="Black",
                 font="Tahoma 14")
button2 = Button(master=frame_main_frame, text="Overview", command=overview, bg="#adb2b8", fg="Black", font="Tahoma 14")
button3 = Button(master=frame_main_frame, text="Settings", command=settings, bg="#adb2b8", fg="Black", font="Tahoma 14")
button4 = Button(master=frame_main_frame, text="Reserved", command=reserved, bg="#adb2b8", fg="Black", font="Tahoma 14")
button311 = Button(master=frame_general2, text="General1", command=general_menu, bg="#adb2b8", fg="Black",
                   font="Tahoma 14")
button312 = Button(master=frame_general2, text="General1", command=general_menu, bg="#adb2b8", fg="Black",
                   font="Tahoma 14")
button313 = Button(master=frame_general2, text="General1", command=general_menu, bg="#adb2b8", fg="Black",
                   font="Tahoma 14")
button314 = Button(master=frame_general2, text="General1", command=general_menu, bg="#adb2b8", fg="Black",
                   font="Tahoma 14")
button315 = Button(master=frame_general2, text="General1", command=general_menu, bg="#adb2b8", fg="Black",
                   font="Tahoma 14")
var = BooleanVar()
var.set(0)
R1 = Radiobutton(master=frame_general2, text="Local remote   ", width=29, height=1, variable=var, value=True)
R1.place(x=5, y=45)
R2 = Radiobutton(master=frame_general2, text="Online remote", width=29, height=1, variable=var, value=False)
R2.place(x=5, y=65)
var2 = BooleanVar()
var2.set(0)
R3 = Radiobutton(master=frame_general2, text="Manual Off       ", width=29, height=1, variable=var2, value=True)
R3.place(x=5, y=125)
R4 = Radiobutton(master=frame_general2, text="Manual On       ", width=29, height=1, variable=var2, value=False)
R4.place(x=5, y=145)
var3 = BooleanVar()
var3.set(0)
R5 = Radiobutton(master=frame_general2, text="Manual Off       ", width=29, height=1, variable=var3, value=True)
R5.place(x=5, y=205)
R6 = Radiobutton(master=frame_general2, text="Manual On       ", width=29, height=1, variable=var3, value=False)
R6.place(x=5, y=225)
var4 = BooleanVar()
var4.set(0)
R7 = Radiobutton(master=frame_general2, text="Manual Off       ", width=29, height=1, variable=var4, value=True)
R7.place(x=5, y=280)
R8 = Radiobutton(master=frame_general2, text="Manual On       ", width=29, height=1, variable=var4, value=False)
R8.place(x=5, y=300)
frame_main_frame.place(x=5, y=5, width=790, height=590)
frame_sensor_frame.place(x=150, y=10, width=622, height=195)
frame_tumblers_frame.place(x=18, y=225, width=765, height=355)
frame_tumblers1_frame.place(x=18, y=225, width=765, height=355)
frame_tumblers2_frame.place(x=18, y=225, width=765, height=355)
frame_tumblers3_frame.place(x=18, y=225, width=765, height=355)
frame_general1.place(x=3, y=5, width=250, height=340)
frame_general2.place(x=256, y=5, width=250, height=340)
frame_general3.place(x=508, y=5, width=250, height=340)
button1.place(x=10, y=13, width=130, height=40)
button2.place(x=10, y=63, width=130, height=40)
button3.place(x=10, y=113, width=130, height=40)
button4.place(x=10, y=163, width=130, height=40)
button311.place()
button312.place()
button313.place()
th = Thread(target=logic_center.remote_control_install, daemon=True)
th.start()
th1 = Thread(target=start2, daemon=True)
th1.start()
th = Thread(target=start1, daemon=True)
th.start()
th2 = Thread(target=parsing_ESP, daemon=True)
th2.start()
th3 = Thread(target=parsing_GPIO_Sadok, daemon=True)
th3.start()
th4 = Thread(target=parsing_GPIO_4relay11, daemon=True)
th4.start()
root.after(0, start_frame)
root.after(0, check_Power)
root.after(0, check_req)
root.after(2000, check_Light_sensor_conections)
root.after(1000, check_Server_sensor_conections)
root.after(1000, update_time)
root.title('Control panel')
root.after(500, parser_GPIO_sadok)
root.after(500, parser_GPIO_4relay)
root.after(0, xxx)
root.mainloop()

Python для новичков » Как свапнуть оси графика Matplotlib » Июнь 16, 2021 10:52:52

Добрый день. Я недавно начал изучать питон и возникла необходимость воспользоваться библиотекой Matplotlib для построения графика по заданным точкам. Код класса выглядит следующим образом:
class Canvas(FigureCanvas):
def __init__(self, parent, df, row, temperature, items, deep):
row = row
temperature = temperature
items = items
deep = deep

fig, self.ax = plt.subplots(figsize= (6,7))
super().__init__(fig)
self.setParent(parent)
self.ax.clear()

self.ax.set(title=f'График по {row} строке')
self.ax.set_xlabel(“Глубина, м”, fontweight='bold', fontsize=16)
self.ax.set_ylabel(“Температура, °C”, fontweight='bold', fontsize=16)

self.ax.xaxis.set_label_position('bottom')
self.ax.yaxis.set_label_position('left')

self.ax.xaxis.set_major_locator(ticker.AutoLocator())
self.ax.xaxis.set_minor_locator(ticker.AutoLocator())
self.ax.yaxis.set_major_locator(ticker.AutoLocator())
self.ax.yaxis.set_minor_locator(ticker.AutoLocator())
self.ax.grid()
self.ax.minorticks_on()

self.ax.plot(items, marker='.')
plt.show()

Да, я знаю, что сделано плохо, прошу за это не бить. Был бы признателен, если подскажете, как построить график зависимости температуры от глубины, а не наоборот, как сейчас. Всем заранее спасибо за ответы.

Python для новичков » пожалуйста залейте мне сайт на pythonanywhere » Июнь 16, 2021 09:07:29

я мучаюсь с этим уже два дня, дам логин-пароль от учётки и архив с сайтом, пожалуйста, мне сдавать это через пару дней а я никак не могу - ошибку пишет и всё!(

Django » Как настроить админ-панель? Если... » Июнь 15, 2021 20:29:54

Привет. Имею замороченный вопрос..
#Здесь модели марок авто для БМВ x5 x6 x7. Для Ауди А5 А6 А7
class Model_Auto(models.Model):
model = models.CharField(max_length=30)

#Марка авто БМВ, Ауди
class Mark_Auto(models.Model):
mark = models.CharField(max_length=20) #Здесь создаю в админке БМВ
models = models.ManyToManyField(Model) #Отмечаю для БМВ X5 X6 X7

class Auto:
mark = ForeighnKey(Mark_Auto)
model = ?????????????

Как настроить админку так чтоб при создании выбираю Auto.mark - БМВ, То в списке Auto.model только те Model_Auto которые отметил для БМВ в Mark_Auto.models ??















Django » Создание новой модели  » Июнь 7, 2021 17:58:05

Добрый день,
Подскажите как я могу осуществить опцию когда заполнение некоторых полей при сохранении надо брать их из другой модели?
Допустим есть в модели из которой надо взять есть поле price_per_unit = models.DecimalField('price_per_unit',
max_digits=50,
decimal_places=2,
default=0.00,
blank=False,
null=False)
Это как то делается при помощи метода save? Как это оформить?

+ когда в задании у новой модели для некоторых полей которые в ней будут указано True/False что это означает?

Заранее спасибо!

Python для экспертов » Помогите пожалуйста СРОЧНО!!!!! » Июнь 6, 2021 18:00:00

Дана матрица MхN.Если существует множество чисел, встречающихся в строках (столбцах), то мы называем эти строки (столбцы) аналогичными. Найти количество столбиков, напоминающих последний столбик.

Центр помощи » Вычислить минимальное значение функции  » Июнь 2, 2021 09:30:07

Помогите решить задачу, кто сможет - объясните (хотя бы кратко) как решалась. Заранее спасибо.
Вычислить минимальное значение функции y = 3x^4*e^2x -b, если b = 2,4,6, a переменная х последовательно принимает значения из отрезка с шагом h = 0.5.

Python для новичков » Обмен данными между Python и QML » Июнь 1, 2021 11:50:51

Здравствуйте!
Я пишу программу на Python (файл test.py), а интерфейс на QML (файл test.qml). Но я не знаю, как передать данные из Python в QML и обратно.
Сейчас при нажатии на кнопку выводится сообщение “QML”, которое прописано в коде файла test.qml
Я хочу, чтобы при нажатии на кнопку в текстовом окне появилось содержимое переменной a=“Переменная из Python”, которая задана в файле test.py.

Помогите, пожалуйста, решить задачу

Код файла test.py (Python):
 import sys
# Класс QUrl предоставляет удобный интерфейс для работы с Urls
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QApplication, QWidget
# Класс QQuickView предоставляет возможность отображать QML файлы.
from PyQt5.QtQuick import QQuickView
from PyQt5.QtGui import QGuiApplication
from PyQt5.QtQml import QQmlApplicationEngine
from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot
a="Переменная из Python"
if __name__ == '__main__':
    app = QApplication(sys.argv)
    # Объект QQuickView, в который грузится UI для отображения
    view = QQuickView()
    view.setSource(QUrl('test.qml'))
    view.show()
    app.exec_()
    sys.exit()

Код файла test.qml (QML):
 import QtQuick 2.15
import QtQuick.Window 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.15
Rectangle {
    /// уникальный id, по которому можно обращаться к данному элементу
    id: mainRect
    /// указываю размеры
    width: 350
    height: 200
    /// указываю, чтобы прямоугольник отображалсяс рамкой серого цвета
    border.color: "LightGray"
    /// Объект линия, она самостоятельно ровняет элементы (согласно настройкам),
    /// которые размещаются внутри нее (кнопка и поле вывода)
    RowLayout {
        anchors.fill: parent /// заполняет полностью родительский элемент, т.е. прямоугольник mainRect
        spacing: 6
        Button {
            id: buttonClickMe
            Layout.leftMargin: 10 /// отступ от левой границы 10
            text: "Нажми на кнопку"
            // по нажатию на кнопку будет происходить:
            onClicked: {
            txtFild.text = 'QML' /// заменяем текст в поле txtFild на 'Привет!'
                console.log("QML")   /// вывод текста в консоль
            }
        }
        /// текстовое поле
        TextField {
            id: txtFild
            text: ""
        }
    }
}

Python для новичков » Очистка каталога с песнями .mp3 от ненужного с помощью Python/ » Май 30, 2021 12:28:10

Уважаемые спецы подскажите.
1. Есть каталог с песнями .mp3 - Эти песни я качаю с интернет радио.
Он постоянно меняется. Содержимое его видно на — Screenshot_1.jpg
2. Есть файл: delit.txt - В нём список групп, которые нужно удалить.
Этот файл будет постепенно изменятся.
Вот этот файл:
Guns N' Roses - Это будет всегда разное.mp3
The Doors - Это будет всегда разное.mp3
Led Zeppelin - Это будет всегда разное.mp3

#Вот этот каталог: D:\_+__Запись RadioSure\1.FM - Classic Rock Replay
#Нужно удалить из этого каталога все песни данных авторов.
#Названия песен всегда будут разные.
#Список будет большой.

Python для новичков » Не получается нарисовать график » Май 27, 2021 13:59:25

https://plotly.com/python/candlestick-charts/

Там есть пример кода:

 import plotly.graph_objects as go
import pandas as pd
from datetime import datetime
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
fig = go.Figure(data=[go.Candlestick(x=df['Date'],
                open=df['AAPL.Open'],
                high=df['AAPL.High'],
                low=df['AAPL.Low'],
                close=df['AAPL.Close'])])
fig.show()

Но он что то у меня не работает.

Я поменял
 #import plotly.graph_objects as go
на
from plotly import graph_objs as go

Но все равно:

     fig = go.Figure(data=[go.Candlestick(x=df['Date'],
AttributeError: module 'plotly.graph_objs' has no attribute 'Candlestick'
Как победить этот атрибут ??

Python для новичков » Ищу разработчиков Python в команду по разработке технологии синтеза речи на нейронный сетях Tacorton 2 » Май 22, 2021 14:55:36

Здравствуйте
Ищу разработчиков Python с опытом от 1 года для совместной разработки синтеза речи на нейронках Tacotron 2 с последующей совместимостью с голосовым ассистентом.
Нужна помощь в создании комерческого проекта по типу “Amazon Alexa” для ещё не зарегестрированной компании. Комндная разработка Voice Assistent с синтезом речи на нейросетях для использования в технологиях умного дома. Конкретно требуется помощь совмесщения отсентезированного голоса с логикой кода ассистента и возможностью что бы отсентизированным голосом отвечало на команды. В последствии успешно созданного проекта будут привлечены сторонии инвестиции в проект и дальнейшее развитие стартапа с официальным открытием юредически подкреплённой компании.

Информация о оплате и финанасах:
Так как стартап только в начале разработки, оплачивать труд разработчиков возможности нет, по этому я приглашаю вас разработчиков Python организовать команду а в последствии компанию, на этапах создания бета-версии нашего проекта что бы представить наш продукт лицам которые могут проивестировать наш проект для дольнейшего толчка развития. нам придётся разрабатывать это всё на своём энтузиазме и мотивации. после создания успешной бета-версии проекта мы сможем представить продукт и соотвественно получить инвестиции, дальнейшие финансы на разработку и усовершенствования проекта будут делиться между участниками команды, так же после открытия компании все участиники проекта ( по желанию ) будут официально трудоустроены и получать фиксированную заработную плату.
Ищу людей которые хотят просто открыть своё командное дело и приности свой в клад в проект и сделать что то больше чем просто выполнять задания за ЗП.
важно что бы вас заинтересовал этот проект и вы “загорелись” им и его созданием.

обо мне:
Я являюсь Python разработчиком около 2-ух лет, разрабатывал различные скрипты, боты, сайты.

Объязательно иметь понимание:
Понимать как устроенны Голосовые ассистенты и логика их работы.
Понимать как совмещать готовые аудио-файлы синтезированной речи для обработки голосовых команд.
Что нибудь знать о нейросетях и построения машинного обучения и как данный код с редультатом совмещать с проектом который не связан с ИИ
Ну и просто быть более менее опытным кодером что бы не вазникало трудностей с минимальными задачами по типу распарсить страницу, использование ООП. и тому подобные базовые вещи разработки.

Кто готов вступить в команду и сделать по настоящему крутой проект а не гнаться за ЗП то прошу к себе в лс Telegram - @neosolar
Будет крутой наш совместный проект - мы сможем представить его и заработать на этом
Так же приветсвуется личная встреча для более детального и эффективного разбора и создания проекта!

Всем спасибо!

Python для новичков » Рассчитать процент между данными двух столбцов и вывести по каждой строчке в DataFrame  » Май 21, 2021 14:28:42

Добрый день.
Подскажите пожалуйста, у меня не выходит произвести расчет. Все уже перепробовала.

Нужно в столбец “% прохождения”, вывести данные по следующей формуле:
* 100 /

Мой итоговый код:

 DF['% прохождения'] = DF['пройденные'] * 100 #на этом этапе все ОК
DF['% прохождения']= DF['% прохождения'].astype(float) / DF['назначенные'].astype(float)

Выводимые данные:
index/Название/назначенные/пройденные/% прохождения
0 опубликован1142 10 1 NaN
1 опубликован1153 10 2 NaN
2 опубликован1184 10 1 NaN
3 опубликован1105 10 2 NaN

Должно быть:
index/Название/назначенные/пройденные/% прохождения
0 опубликован1142 10 1 10
1 опубликован1153 10 2 20
2 опубликован1184 10 1 10
3 опубликован1105 10 2 20


Еще вот так пробовала:
 def procent_proxozhdeniya(a, b):
    return  a / b
DF['% прохождения'] = DF.apply(lambda x: procent_proxozhdeniya(DF['% прохождения'], DF['назначенные']) , axis=1)

Без .astype(float) тоже пробовала.
В лучшем случае выводил в ячейку слипшиеся названия столбцов ((