from time import sleep
def worker(n: int, cb=None):
for i in range(n):
sleep(0.2) # работу работаем
if cb is not None and i % 5 == 0:
cb(i, n) # оповещаем, если пора и если есть что
if cb is not None:
cb(n, n) # последнее оповещение на 100%. можно убрать
# использование
def callback(i, n): # callback для вывода прогресса в консоль
print(f'{i/n:.1%}') # выводим процент завершения
worker(50, callback) # работаем
def setting(self):
self.server.check_currency()
...
self.setting()
window1 = Kurz()
, так как приложение уйдёт в рекурсивный вызов self.setting()
и из него уже не вернётся.from pdf2image import convert_from_path, convert_from_bytes
# если у тебя есть именованный файл на диске
images = convert_from_path('/home/belval/example.pdf')
# или, если у тебя есть содержимое файла как объект bytes
bytes_obj = open('/home/belval/example.pdf', 'rb').read() # получаем объект bytes
images = convert_from_bytes(bytes_obj)
# так или иначе в images будет лежать список изображений PIL (пакет pillow),
# по одному на страницу. Их уже можно сохранять или делать с ними что-то ещё.
import ctypes
import ctypes.wintypes as w
def ErrorIfZero(result, func, args):
if not result:
raise ctypes.WinError(ctypes.get_last_error())
return result
# используем user32.dll и kernel32.dll
kernel32 = ctypes.windll.kernel32
user32 = ctypes.windll.user32
gdi32 = ctypes.windll.gdi32
# описываем используемые функции, типы и константы
kernel32.GetConsoleWindow.argtypes = []
kernel32.GetConsoleWindow.restype = w.HWND
kernel32.GetConsoleWindow.check = ErrorIfZero
user32.GetWindowRect.argtypes = [w.HWND, w.LPRECT]
user32.GetWindowRect.restype = w.BOOL
user32.GetWindowRect.check = ErrorIfZero
user32.SetWindowRgn.argtypes = [w.HWND, w.HRGN, w.BOOL]
user32.SetWindowRgn.restype = w.INT
user32.SetWindowRgn.check = ErrorIfZero
gdi32.DeleteObject.argtypes = [w.HANDLE]
gdi32.DeleteObject.restype = w.BOOL
gdi32.DeleteObject.check = ErrorIfZero
gdi32.CreateRectRgnIndirect.argtypes = [w.LPRECT]
gdi32.CreateRectRgnIndirect.restype = w.HRGN
gdi32.CreateRectRgnIndirect.check = ErrorIfZero
gdi32.CombineRgn.argtypes = [w.HRGN, w.HRGN, w.HRGN, w.INT]
gdi32.CombineRgn.restype = w.INT
gdi32.CombineRgn.check = ErrorIfZero
RGN_AND = 1
RGN_OR = 2
RGN_XOR = 3
RGN_DIFF = 4
RGN_COPY = 5
hWnd = kernel32.GetConsoleWindow()
r = w.RECT()
user32.GetWindowRect(hWnd, ctypes.byref(r))
r.left, r.right = 0, r.right - r.left
r.top, r.bottom = -50, r.bottom - r.top #почему-то есть косяк с заголовком окна
hole = w.RECT(r.right // 4, r.bottom // 4, 3 * r.right // 4, 3 * r.bottom // 4)
hRgn = gdi32.CreateRectRgnIndirect(ctypes.byref(r))
hHole = gdi32.CreateRectRgnIndirect(ctypes.byref(hole))
gdi32.CombineRgn(hRgn, hRgn, hHole, RGN_DIFF)
gdi32.DeleteObject(hHole)
user32.SetWindowRgn(hWnd, hRgn, True)
input('Press Enter to fix the hole.')
user32.SetWindowRgn(hWnd, 0, True)
gdi32.DeleteObject(hRgn)
from PyQt5.QtWidgets import QApplication, QLabel
app = QApplication([])
# This is a requirement of Qt: Every GUI app must have exactly one instance of QApplication.
# Many parts of Qt don't work until you have executed the above line.
# You will therefore need it in virtually every (Py)Qt app you write.
# The brackets [] in the above line represent the command line arguments passed to the application.
# Because our app doesn't use any parameters, we leave the brackets empty.
label = QLabel('Hello World!')
label.show()
app.exec()
Приложение просто не отвечает после нажатия кнопки 'Запуск'(функция start)