Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3494 posts.

GUI » Как рястянуть text Edit на всё окно PyQt5 » Фев. 10, 2019 17:01:51

#делал через qt Designer
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(“MainWindow”)
MainWindow.resize(418, 446)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName(“centralwidget”)
self.fontComboBox = QtWidgets.QFontComboBox(self.centralwidget)
self.fontComboBox.setGeometry(QtCore.QRect(0, 0, 171, 22))
self.fontComboBox.setObjectName(“fontComboBox”)

self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit.setGeometry(QtCore.QRect(13, 20, 341, 331))
self.textEdit.setAutoFillBackground(False)
self.textEdit.setObjectName(“textEdit”)

MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 418, 21))
self.menubar.setObjectName(“menubar”)
self.FIle = QtWidgets.QMenu(self.menubar)
self.FIle.setObjectName(“FIle”)
self.Format = QtWidgets.QMenu(self.menubar)
self.Format.setObjectName(“Format”)
self.actionAvtor = QtWidgets.QMenu(self.menubar)
self.actionAvtor.setObjectName(“actionAvtor”)
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName(“statusbar”)
MainWindow.setStatusBar(self.statusbar)
self.actionCreate = QtWidgets.QAction(MainWindow)
self.actionCreate.setObjectName(“actionCreate”)
self.actionOpen = QtWidgets.QAction(MainWindow)
self.actionOpen.setObjectName(“actionOpen”)
self.actionSave = QtWidgets.QAction(MainWindow)
self.actionSave.setObjectName(“actionSave”)
self.actionClose = QtWidgets.QAction(MainWindow)
self.actionClose.setObjectName(“actionClose”)
self.actionFont = QtWidgets.QAction(MainWindow)
self.actionFont.setObjectName(“actionFont”)
self.FIle.addAction(self.actionCreate)
self.FIle.addAction(self.actionOpen)
self.FIle.addAction(self.actionSave)
self.FIle.addSeparator()
self.FIle.addAction(self.actionClose)
self.Format.addAction(self.actionFont)
self.menubar.addAction(self.FIle.menuAction())
self.menubar.addAction(self.Format.menuAction())
self.menubar.addAction(self.actionAvtor.menuAction())

self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate(“MainWindow”, “Текстовый редактор”))
self.FIle.setTitle(_translate(“MainWindow”, “Файл”))
self.Format.setTitle(_translate(“MainWindow”, “Формат”))
self.actionAvtor.setTitle(_translate(“MainWindow”, “Об авторе”))
self.actionCreate.setText(_translate(“MainWindow”, “Новый Файл”))
self.actionOpen.setText(_translate(“MainWindow”, “Открыть”))
self.actionSave.setText(_translate(“MainWindow”, “Сохранить”))
self.actionClose.setText(_translate(“MainWindow”, “Выход”))
self.actionFont.setText(_translate(“MainWindow”, “Шрифт”))

#Это основная программа которая вызывает данный интерфейс
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(“MainWindow”)
MainWindow.resize(418, 446)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName(“centralwidget”)
self.fontComboBox = QtWidgets.QFontComboBox(self.centralwidget)
self.fontComboBox.setGeometry(QtCore.QRect(0, 0, 171, 22))
self.fontComboBox.setObjectName(“fontComboBox”)

self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit.setGeometry(QtCore.QRect(13, 20, 341, 331))
self.textEdit.setAutoFillBackground(False)
self.textEdit.setObjectName(“textEdit”)

MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 418, 21))
self.menubar.setObjectName(“menubar”)
self.FIle = QtWidgets.QMenu(self.menubar)
self.FIle.setObjectName(“FIle”)
self.Format = QtWidgets.QMenu(self.menubar)
self.Format.setObjectName(“Format”)
self.actionAvtor = QtWidgets.QMenu(self.menubar)
self.actionAvtor.setObjectName(“actionAvtor”)
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName(“statusbar”)
MainWindow.setStatusBar(self.statusbar)
self.actionCreate = QtWidgets.QAction(MainWindow)
self.actionCreate.setObjectName(“actionCreate”)
self.actionOpen = QtWidgets.QAction(MainWindow)
self.actionOpen.setObjectName(“actionOpen”)
self.actionSave = QtWidgets.QAction(MainWindow)
self.actionSave.setObjectName(“actionSave”)
self.actionClose = QtWidgets.QAction(MainWindow)
self.actionClose.setObjectName(“actionClose”)
self.actionFont = QtWidgets.QAction(MainWindow)
self.actionFont.setObjectName(“actionFont”)
self.FIle.addAction(self.actionCreate)
self.FIle.addAction(self.actionOpen)
self.FIle.addAction(self.actionSave)
self.FIle.addSeparator()
self.FIle.addAction(self.actionClose)
self.Format.addAction(self.actionFont)
self.menubar.addAction(self.FIle.menuAction())
self.menubar.addAction(self.Format.menuAction())
self.menubar.addAction(self.actionAvtor.menuAction())

self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate(“MainWindow”, “Текстовый редактор”))
self.FIle.setTitle(_translate(“MainWindow”, “Файл”))
self.Format.setTitle(_translate(“MainWindow”, “Формат”))
self.actionAvtor.setTitle(_translate(“MainWindow”, “Об авторе”))
self.actionCreate.setText(_translate(“MainWindow”, “Новый Файл”))
self.actionOpen.setText(_translate(“MainWindow”, “Открыть”))
self.actionSave.setText(_translate(“MainWindow”, “Сохранить”))
self.actionClose.setText(_translate(“MainWindow”, “Выход”))
self.actionFont.setText(_translate(“MainWindow”, “Шрифт”))

Django »  Проверка "лёгкого" и "тяжёлого" кеша  » Фев. 10, 2019 00:38:57

В проекте есть 2 кеша: 1 - дефолтный (легкий), используется через redis; 2 - “тяжёлый”.

 CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    },
    'heavylift': {
        'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
        'LOCATION': os.path.join(BASE_DIR, 'django_cache'),
    }
}



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

Вот, до какого алгоритма пришёл, но что-то мне подсказывает, что это совсем не то. Подправьте, пожалуйста, кто знает. А то в интернете толковый пример сложно найти.

 @cache_page(60 * 60)
def user_data_view(request):
    cache1 = caches['default']                         #Прирывниваем легкий кеш к cache1
    cache2 = caches['heavylift']                       #Прирывниваем тяжёлый кеш к cache2
 
    cache1.set('my_key', 'Идёт подготовка данных') #Получаем данные из "легкого" кеша, или None (если он пуст)
    if cache1.get('my_key', None) == None:      #Если "легкий" кеш пуст, проверяем heavylift
 
        #Получаем данные из "тяжёлого" кеша, или None (если он пуст)
        if cache2.get('heavylift', None) == None: #Если "тяжёлый" кеш пуст, запускаем асинхронную задачу. Что если он не пуст?
 
           #Запуск асинхронной задачи
 
    else:                                                      #Если "легкий" кеш не пуст - прекращаем работу
        return

P.S. Django 1.11, Python 2.7.

Python проекты » Нужен Python/Django программист на поддержку проекта (УДАЛЕННО) » Фев. 8, 2019 11:15:19

Удаленно на поддержку проекта, сначала одного, но возможно на несколько в дальнейшем.

Python/Django/DRF + JS/React.

Знание Python/Django на хорошем уровне, пониманеи ReactJS.

Ссылки на Github или на реализованные проекты и ставку в личку.
Спасибо!

Python для новичков » Pandas. Замена пустого значения на ближайшее непустое в столбике. » Фев. 8, 2019 07:08:33

Вобщем-то суть вопроса в заголовке.
Берётся csv файл, в котором отображается работа устройств за месяц.
Из 700+ строк, сортируется в 31 день (зависит от месяца), в каждом дне кол-во печати и копирования.
Но бывает такое, что устройство не работало какой-то промежуток времени, и следовательно, значения в эти дни = None.
Логика вывода в моём случае по 7 дней от начала недели. Устройство не работало с 6 - 9 число, ну и на выходе у меня 2 первые недели с пустыми значениями, т.к. 7 = None, и в обе стороны ( первая и вторая неделя) расчёты заглохли.

Как можно заменить эти пустые значения, на ближайшие непустые в столбце?

Python для новичков » Многопоточность с помощью класса Process » Фев. 5, 2019 20:23:10

Решил сделать многопоточный подсчёт факториала.
n -число, для которого считается факториал
k - количество потоков, на которое выполняется разбиения вычисления.
Не работает для 3-х и 9-ти и более потоков! Как правило последний поток остаётся жив, при том, что тело target для процесса выполнено. Почему так?
Вот код:
 from multiprocessing import Process, Queue, Value
import time
def fact(q,i1,i2,progr):
    #print ("i1=",i1," i2=",i2)
    m=1
    for i in range(i1+1,i2+1):
        m=i*m
        progr.value=100*(i-i1)//(i2-i1)
        #print(progr.value)
    q.put(m)
    print("exit i1,i2",i1,i2)
if __name__ == '__main__':
    n=35000
    k=9
    start_time = time.time()
    q = Queue()
    progr=[Value('d', 0.0)] * k
    p=[Process(target=fact,name='{}'.format(i),args=(q,n*i//k,n*(i+1)//k,progr[i],)) for i in range(k)]
    for x in p: x.start()
    #for x in p: x.join(0.1)
    while any(( x.is_alive() for x in p )):
       time.sleep(1)
       sum1=0
       for x in progr:
         sum1=sum1+x.value
       print("progress=",sum1/k)
       print([(x.is_alive(),x.name) for x in p])
       print([x.value for x in progr])
....
    res=1
    while not q.empty():
      res=res*q.get()
    print("time=",time.time()-start_time)
    #print(res)
....

Центр помощи »  Задания по теме Сортировка. Двоичный поиск. Матрицы. HELP Python Чайник)) » Фев. 1, 2019 14:51:21

1.Напишите программу, в которой сортировка выполняется «методом камня» – самый тяжёлый» элемент опускается в конец массива.

2.Напишите программу, которая сортирует первую половину массива по возрастанию, а вторую – по убыванию (элементы из первой половины не должны попадать во вторую и наоборот).

3 .Напишите программу, которая считает среднее число шагов при двоичном поиске для массива из 32 элементов в диапазоне 0..100. Для поиска используйте 1000 случайных чисел в этом же диапазоне

4.Напишите программу, которая заполняет матрицу случайными числами, а затем записывает
нули во все элементы выше главной диагонали.

5.Напишите программу, которая заполняет матрицу случайными числами, а затем записывает
нули во все элементы выше побочной диагонали

Python для новичков » Задания по теме Сортировка. Двоичный поиск. Матрицы. HELP Python Чайник)) » Фев. 1, 2019 14:40:05

1.Напишите программу, в которой сортировка выполняется «методом камня» – самый тяжёлый» элемент опускается в конец массива.

2.Напишите программу, которая сортирует первую половину массива по возрастанию, а вторую – по убыванию (элементы из первой половины не должны попадать во вторую и наоборот).

3 .Напишите программу, которая считает среднее число шагов при двоичном поиске для массива из 32 элементов в диапазоне 0..100. Для поиска используйте 1000 случайных чисел в этом же диапазоне

4.Напишите программу, которая заполняет матрицу случайными числами, а затем записывает
нули во все элементы выше главной диагонали.

5.Напишите программу, которая заполняет матрицу случайными числами, а затем записывает
нули во все элементы выше побочной диагонали

Центр помощи » массивы » Янв. 31, 2019 15:04:31

Заполните массив случайными числами и выполните реверс для части массива между элементами с индексами K и M (включая эти элементы).

Центр помощи » Помогите пожалуйста с PyCrypto » Янв. 30, 2019 16:11:05

Помогите пожалуйста, как установить PyCrypto на Windows 7 и Python 3.7.0 подробно от начала до конца.

Python для экспертов » cefpython3 связь JS и Python » Янв. 30, 2019 11:06:13

Python 3.4. GUI - wxPython.
Необходимо вычислить размер текста в пикселях, объявленного в SVG документе.
 <svg viewBox="0 0 {width} {height}" xmlns="http://www.w3.org/2000/svg" id="svg" height="100%" width="100%">
  <text font-family="{font}" font-size="{size}" id="user_text">{text}</text>
</svg>
Средствами Python и wxPython это сделать не получается. wxPython позволяет определить размеры, который будет занимать текст с определенным шрифтом, размером и т.д., но они не верны для SVG (из-за масштабирования svg-документа, как я понял).
Нашел способ вычисления размера текста через JS:
 let text = document.getElementById("user_text");
let box = text.getBBox();
let w = box.width;
let h = box.height;
Это решение дает верный результат.
Мне необходимо использовать значения, вычисленные в JS, в моей GUI программе на Python.
Встроенные в wxPython web-движок такое не вытягивает (там какой-то старый IE).
Посоветовали библиотеку cefpython3 - Chromium Embedded Framework. Она позволяет подключить браузер к GUI. Это работает отлично.
Как я понял из туториала, из Python можно вызвать JS методы, предварительно их объявив.
Но мне никак не удается реализовать механизм, чтобы после выполнения функции JS вернуть результат обратно в Python и использовать его.
Возможно ли вообще такое? Если да, подскажите, пожалуйста, в какую сторону копать.

Python для новичков » Может ли протухнуть session в sqlalchemy, возможно ли исключение в session.close()? » Янв. 30, 2019 07:05:28

Всем привет!
Прекрасно знаю, что время жизни сессии должно быть коротким, но просто появляется вопрос, может ли как то со временем сессия протухнуть или разрушиться?
Может ли выдать session.close() исключение?

Python для новичков » Ошибка при установке pyinstaller через pip » Янв. 29, 2019 16:34:17

>pip install pyinstaller

*процесс установки*

>File “setup.py”, line 20, in <module>
from PyInstaller import __version__ as version, HOMEPATH, PLATFORM
ModuleNotFoundError: No module named ‘PyInstaller’

—————————————-
Command “”c:\users\firstuser\appdata\local\programs\python\python37-32\python.exe“ ”c:\users\firstuser\appdata\local\programs\python\python37-32\lib\site-packages\pip\_vendor\pep517\_in_process.py“ get_requires_for_build_wheel ”D:\Program Files (x86)\tmpt77ll04a“” failed with error code 1 in D:\Program Files (x86)\pip-install-faiuhhug\pyinstaller

Гуглил, в некоторых источниках предлагают установить wheel через pip, не помогло.

Python для новичков » Анимация движущегося объекта » Янв. 29, 2019 00:19:58

Приветствую!
Хотел бы узнать, как реализовать анимацию такого объекта, как снаряд, который должен работать только после нажатия на кнопку. Сейчас после нажатия не происходит ничего, ошибок тоже нет.
Вот собственно код:
 import pygame
pygame.init()
name = "Best Game Ever"
logo = pygame.image.load('logo.png')
disp_width=1000 #Размер дисплея
disp_height=600
player_walk_left = [pygame.image.load('walk left/left1.png'), pygame.image.load('walk left/left2.png'), pygame.image.load('walk left/left3.png'), pygame.image.load('walk left/left4.png')]
player_walk_right = [pygame.image.load('walk right/right1.png'), pygame.image.load('walk right/right2.png'), pygame.image.load('walk right/right3.png'), pygame.image.load('walk right/right4.png')]
player_stand_right = [pygame.image.load('stand/right1.png'), pygame.image.load('stand/right2.png'), pygame.image.load('stand/right3.png'), pygame.image.load('stand/right4.png')]
player_stand_left = [pygame.image.load('stand/left1.png'), pygame.image.load('stand/left2.png'), pygame.image.load('stand/left3.png'), pygame.image.load('stand/left4.png')]
disp = pygame.display.set_mode((disp_width, disp_height))
pygame.display.set_caption(name)
pygame.display.set_icon(logo)
frame = pygame.time.Clock()
class player(object):
    def __init__(self, player_x, player_y, width, height):
        self.player_x = player_x
        self.player_y = player_y
        self.width = width
        self.height = height
        self.player_speed = 5
        self.jump = False
        self.left = False
        self.right = False
        self.anim_count = 0
        self.jump_dist = 7
        self.direct = 1
        self.stand_right = True
        self.stand_left = False
    def draw(self, disp):
        if self.anim_count + 1 >= 16:
            self.anim_count = 0
        if self.left:
            disp.blit(player_walk_left[self.anim_count//4], (self.player_x,self.player_y))
            self.anim_count += 1
        elif self.right:
            disp.blit(player_walk_right[self.anim_count//4], (self.player_x,self.player_y))
            self.anim_count +=1
        else:
            if self.direct == 1:
                disp.blit(player_stand_right[self.anim_count//4], (self.player_x,self.player_y))
                self.anim_count +=1
            else:
                disp.blit(player_stand_left[self.anim_count//4], (self.player_x,self.player_y))
                self.anim_count +=1
class fireball_one(object):
    fb_left = [pygame.image.load('fireball/fb1.png'), pygame.image.load('fireball/fb2.png'), pygame.image.load('fireball/fb3.png'), pygame.image.load('fireball/fb4.png'),
               pygame.image.load('fireball/fb5.png'), pygame.image.load('fireball/fb6.png'), pygame.image.load('fireball/fb7.png')]
    def __init__(self, player_x, player_y, facing):
        self.player_x = player_x
        self.player_y = player_y
        self.facing = facing
        self.fb_vel = 8 * facing
    def draw(self, disp):
        for fireball in fireballs:
            self.move()
            self.anim_count = 0
            if self.anim_count + 1 >= 27:
                self.anim_count = 0
            if self.facing == 1:
                disp.blit(self.fb_left[self.anim_count//7], (self.player_x,self.player_y))
                self.anim_count += 1
            else:
                disp.blit(self.fb_left[self.anim_count//7], (self.player_x,self.player_y))
                self.anim_count += 1
    def move(self):
        for fireball in fireballs:
            if fireball.player_x < 500 and fireball.player_x > 0:
                fireball.player_x += fireball.fb_vel  # Moves the bullet by its vel
            else:
                fireballs.pop(fireballs.index(fireball))
                self.anim_count = 0
def redrawGameWindow():
    disp.blit(pygame.image.load('backgroung.png'), (0,0))
    cat.draw(disp)
    for fireball in fireballs:
        fireball.draw(disp)
    pygame.display.update()
cat = player(50, 500, 50, 50)
run = True #Для включенного состояния игры
fireballs = []
while run:
    frame.tick(30)
    for events in pygame.event.get():
        if events.type == pygame.QUIT:  #Выход из игры
            run = False
    keys = pygame.key.get_pressed()
    if keys[pygame.K_f]:
        if cat.direct == -1:
            facing = -1
        else:
            facing = 1
        if len(fireballs) < 10:
            fireballs.append(fireball_one(round(cat.player_x + cat.width//2), round(cat.player_y + cat.height//2), facing))
                                 # This will create a bullet starting at the middle of the character
    if keys[pygame.K_LEFT] or keys[pygame.K_a]:
        if cat.player_x > 5:
            cat.direct = -1
            cat.player_x -= cat.player_speed
            cat.left = True
            cat.right = False
            cat.stand_left = False
            cat.stand_right = False
    elif keys[pygame.K_RIGHT] or keys[pygame.K_d]:
        if  cat.player_x < 970:
            cat.direct = 1
            cat.player_x += cat.player_speed
            cat.left = False
            cat.right = True
            cat.stand_left = False
            cat.stand_right = False
    else:
        if cat.direct == -1:
            cat.stand_left = False
        elif cat.direct == 1:
            cat.stand_right = False
        cat.left = False
        cat.right = False
    if not(cat.jump):
        if keys[pygame.K_SPACE]:
                cat.jump = True
    else:
        if cat.jump_dist >= -7:
            if cat.jump_dist < 0:
                cat.player_y += (cat.jump_dist ** 2) / 3
            else:
                cat.player_y -= (cat.jump_dist ** 2) / 3
            cat.jump_dist -= 1
        else:
            cat.jump = False
            cat.jump_dist = 7
    redrawGameWindow()
pygame.quit()

GUI » Wxpython. Выполнить скрипт в собственном браузере » Янв. 28, 2019 14:15:51

Почему скрипт не может работать полностью (скрипт работает в обычном браузере)? Помечен комментарием “no”.
И SVG не отображается на странице.
Мне нужно через Python определить размер svg-элемента “text”.
Можно как-то решить эту проблему?
 import wx 
import wx.html2 
html_string = """
<!DOCTYPE htm>
<html>
    <head>
       <title>Hello World!</title>
    </head>
    <body>
        <svg viewBox="0 0 192 192" xmlns="http://www.w3.org/2000/svg" id="svg" height="100%" width="100%">
          <rect transform="translate(64,128)" width="27" height="64" stroke-width=".5" fill="#ff0" stroke="#000" id="rect"/>
          <text font-family="monospace" font-size="16" transform="translate(64,141)" id="tsvg">Test Text</text>
        </svg>
        <script type="text/javascript">
            var text = document.getElementById('tsvg');
            alert(text); // ok
            var tw = text.getComputedTextLength();
            alert(tw); // no
            var box = text.getBBox();
            var w = box.width;
            var h = box.height;
            alert(w+" "+ h); // no
        </script>
    </body>
</html>
"""
class MyBrowser(wx.Dialog): 
  def __init__(self, *args, **kwds): 
    wx.Dialog.__init__(self, *args, **kwds) 
    sizer = wx.BoxSizer(wx.VERTICAL) 
    self.browser = wx.html2.WebView.New(self) 
    sizer.Add(self.browser, 1, wx.EXPAND, 10) 
    self.SetSizer(sizer) 
    self.SetSize((700, 700)) 
if __name__ == '__main__': 
  app = wx.App() 
  dialog = MyBrowser(None, -1) 
  dialog.browser.SetPage(html_string, '')
  dialog.Show() 
  app.MainLoop()

Python для новичков » Вопрос про open cv py » Янв. 27, 2019 14:38:22

Есть программа на python с open cv которая распознает кол.кругов на кубиках
но есть проблема, я не могу посчитать сколько кругов в каждом кубике, а только сумму итого.
Как мне это сделать?
 import sys
import cv2 as cv
import numpy as np
from collections import Counter
from glob import glob
def main(argv):
    ## [load]
    default_file = 'opencv_frame_6.png'
    filename = argv[0] if len(argv) > 0 else default_file
    sum = 0
    # Loads an image
    src = cv.imread(cv.samples.findFile(filename), cv.IMREAD_COLOR)
    # Check if image is loaded fine
    if src is None:
        print ('Error opening image!')
        print ('Usage: hough_circle.py [image_name -- default ' + default_file + '] \n')
        return -1
    ## [load]
    ## [convert_to_gray]
    # Convert it to gray
    gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
    ## [convert_to_gray]
    ## [reduce_noise]
    # Reduce the noise to avoid false circle detection
    gray = cv.medianBlur(gray, 5)
    ## [reduce_noise]
    ## [houghcircles]
    rows = gray.shape[0]
    circles = cv.HoughCircles(gray, cv.HOUGH_GRADIENT, 1, rows / 15,
                               param1=100, param2=28,
                               minRadius=59, maxRadius=130)
   
    circles1 = cv.HoughCircles(gray, cv.HOUGH_GRADIENT, 1, rows / 21,
                               param1=150, param2=28,
                               minRadius=1, maxRadius=50)## [houghcircles]
    ## [draw]
    if circles is not None:
        circles = np.uint16(np.around(circles)).astype("int")
        color_red = (0,0,255)
        for i in circles[0, :]:
            center = (i[0], i[1])
            
            # circle center
            cv.circle(src, center, 1, (0, 100, 100), 3)
            # circle outline
            radius = i[2]
            cv.circle(src, center,radius,(255, 0, 255), 3)          
    if circles1 is not None:
        circles1 = np.uint16(np.around(circles1)).astype("int")
        color_red = (0,0,255)
        for i in circles1[0, :]:
            center = (i[0], i[1])
            # circle center
            cv.circle(src, center, 1, (0, 100, 100), 3)
            # circle outline
            radius = i[2]
            cv.circle(src, center, radius, (255, 0, 255), 3)
    ## [draw]
    ## [display]
    
    cv.imshow("detected circles", src)
    print (circles)
    print (circles1)
    #print (len(circles[0]))
    #print (len(circles1[0]))
    cv.waitKey(0)
    ## [display]
    return 0
if __name__ == "__main__":
    main(sys.argv[1:])  

GUI » Обработка событий клавиатуры » Янв. 26, 2019 10:53:11

Мне нужно как-то убрать задержку после первого нажатия на клавишу, но я не знаю как, помогите пожалуйста

 import wx
import threading
import time
class GameWindow(wx.App):
    class __DrawThread(threading.Thread):
        def __init__(self, redraw_win):
            threading.Thread.__init__(self)
            self.stopped = False
            self.redraw_win = redraw_win
            self.start()
        def run(self):
            while self.stopped is not True:
                self.repaint()
                time.sleep(0.01)
        def repaint(self):
            dc = wx.ClientDC(self.redraw_win)
            dc.Clear()
    class __ComponentUpdateThread(threading.Thread):
        def __init__(self):
            threading.Thread.__init__(self)
            self.stopped = False
            self.start()
        def run(self):
            pass
    class __EvtHandlerThread(threading.Thread):
        def __init__(self, panel):
            threading.Thread.__init__(self)
            self.stopped = False
            self.panel = panel
            self.start()
        def run(self):
            self.panel.Bind(wx.EVT_KEY_DOWN, self.on_keyboard_down)
        def on_keyboard_down(self, e):
            print (e.GetKeyCode())
            self.panel.Unbind(wx.EVT_KEY_DOWN)
            self.panel.Bind(wx.EVT_KEY_DOWN, self.on_keyboard_down)
    def __init__(self, title="Lucky Project", size=(600, 600)):
        wx.App.__init__(self)
        self.__frame__ = wx.Frame(parent=None, title=title, size=size)
        self.__panel__ = wx.Panel(parent=self.__frame__)
        self.__frame__.Bind(wx.EVT_CLOSE, self.__on_close)
        self.__frame__.Center()
        self.__frame__.Show()
        self.__repaint_thread = self.__DrawThread(self.__panel__)
        self.__component_update_thread = self.__ComponentUpdateThread()
        self.__evt_handler_thread = self.__EvtHandlerThread(self.__panel__)
        self.MainLoop()
    def __on_close(self, e):
        self.__frame__.Destroy()
        self.__repaint_thread.stopped = True
        self.__component_update_thread.stopped = True
        self.__evt_handler_thread.stopped = True
win = GameWindow()

Python для новичков » Запрос к soap сервису с вложенным файлом (attachment) » Янв. 23, 2019 14:02:22

Уважаемые форумчане!
Просьба помочь с кодом обращения к web сервису через Soap.
Есть описание сервиса-приложено к сообщению.
использую библиотеки zeep и zeep-adv для работы с SOAP и передачи вложенного файла.
Код вызова:
from zeep import client
from zeep import ns
from zeep.wsse.username import UsernameToken
from zeep import transport_with_attach as twa
import base64

with open('out.gz','rb')as f:
bytes = f.read()
encoded_data = base64.b64encode(bytes)

print (type(encoded_data))
#filename = ‘out.gz’
CLIENT = client.Client(“C:\\attach\projectPolicyCountService.xml”,
wsse=UsernameToken('login', ‘passowrd’, use_digest=True), transport=twa.TransportWithAttach())

#data = CLIENT.attach(filename)

r = CLIENT.service.getNumberFreeRequest()

print (type(r.attachments.content))
response_attach = r.attachments.content
my_file = open('resp_rsa.gz', ‘wb’)
my_file.write(response_attach)

Если в методе web сервиса не указываю параметр где по идее должен передать приаттачменный файл, то
сервис отвечает и указывает что attachment не передан, как только указываю параметр, начинает ругаться что “TypeError: a bytes-like object is required, not ‘str’”, хотя перед передачей параметра специально смотрю тип данных и он byte. вот строка на которой все ломается r = CLIENT.service.getNumberFreeRequest(encoded_data)
Как корректно передать файл в виде attachment на сервис?

Python проекты » Yatube - просмотрщик и органайзер видео с Youtube » Янв. 18, 2019 19:48:58

Привет всем!
Недавно сделал новую версию Yatube - просмотрщика и органайзера видео с Youtube. Основные функции:
  • Загрузка видео, просмотр видео в потоке во внешнем проигрывателе (снимите галку с “Медленный ПК”, если есть проблемы)
  • Показ картинки видео и доп. информации, такой как: продолжительность, число просмотров, лайков/дизлайков и т.п.
  • Показ комментариев
  • Подписка на каналы (аккаунт Google не требуется, все данные хранятся в локальной БД). После подписки на канал он будет отображаться в списке в правом углу экрана.
  • Блокировка видео по автору или ключевым словам в заголовке. При совпадении картинка видео будет заменена на картинку по умолчанию, а автор и название будут заменены на слово ЗАБЛОКИРОВАНО. При этом по-прежнему можно будет воспроизвести такие видео или разблокировать их.
  • Показ популярных видео по странам
  • Специальные режимы, такие как Вся лента, История, Отложенное, Избранное, перемещение видео в эти разделы или удаление из них
  • Извлечение ссылок Youtube с других сайтов. Пришлите мне ссылку, если она не работает.
  • Поиск по видео Youtube
  • Фильтры, показ доп. действий по правому клику мыши и т.д.
  • Языки интерфейса: русский, английский

    Страница проекта на GitHub.

Скриншот

GUI » Где скачать PYQT5 с драйвером QMYSQL » Янв. 17, 2019 12:17:33

Пытаюсь перейти с PYQT4 на PYQT5. Обнаружил, что PYQT4 включал в себя драйвер QMYSQL. В PYQT5 его, по умолчанию, нет. Пытался разобраться как включить плагин MySQL в PYQT5, но что-то не выходит собрать.
Вопрос: Можно ли где-то скачать пакет PYQT5 на Python 3 со встроенным драйвером. Наверняка кто-то создавал себе.
Поделитесь, если не жалко.