Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3493 posts.

GUI » [PyQt5] Два разных шрифта в одной ячейке таблицы » Фев. 21, 2022 23:07:31

Приветствую!

Начал изучение Qt5. Хочу сделать так, чтобы в QTableWidgetItem можно было использовать 2 разных шрифта, но без вставки специальных виджетов типа QTextEdit, чтобы это не приводило к замедлению программы. Можете привести простейший пример?

Пока что написал вот такой код, но сам до конца не разобрался, что он делает и как его использовать.
 #!/usr/bin/python3
import PyQt5
import PyQt5.QtWidgets
import sys
cell = 'Общая лексика'
class MyTableModel(PyQt5.QtCore.QAbstractTableModel):
    
    def __init__(self, datain, parent=None, *args):
        PyQt5.QtCore.QAbstractTableModel.__init__(self,parent,*args)
        self.datain = datain
    def rowCount(self,parent=None,*args,**kwargs):
        return 4
    def columnCount(self,parent=None,*args,**kwargs):
        return 4
    
    def data(self,index,role=PyQt5.QtCore.Qt.DisplayRole):
        if not index.isValid():
            return PyQt5.QtCore.QVariant()
        if role == PyQt5.QtCore.Qt.FontRole:
            return PyQt5.QtGui.QFont('Serif',14)
        else:
            try:
                return PyQt5.QtCore.QVariant(self.datain)
            except Exception as e:
                return PyQt5.QtCore.QVariant()
class Table(PyQt5.QtWidgets.QWidget):
    
    def __init__(self,*args,**kwargs):
        super().__init__(*args,**kwargs)
    
    def fill(self):
        table_item = PyQt5.QtWidgets.QTableWidgetItem(cell)
        self.table.setItem(0,0,table_item)
    
    def set_gui(self):
        self.table = PyQt5.QtWidgets.QTableWidget()
        self.table.setRowCount(4)
        self.table.setColumnCount(4)
        self.set_bindings()
        self.hheader = self.table.horizontalHeader()
        self.hheader.setSectionResizeMode(PyQt5.QtWidgets.QHeaderView.ResizeToContents)
        self.model = MyTableModel(datain=cell,parent=self.table)
        self.view = PyQt5.QtWidgets.QTableView(self.table)
        self.view.setModel(self.model)
        self.layout = PyQt5.QtWidgets.QVBoxLayout()
        self.layout.addWidget(self.view)
        self.setLayout(self.layout)
    
    def set_bindings(self):
        PyQt5.QtWidgets.QShortcut(PyQt5.QtGui.QKeySequence('Ctrl+Q'),self).activated.connect(self.close)
        PyQt5.QtWidgets.QShortcut(PyQt5.QtGui.QKeySequence('Esc'),self).activated.connect(self.close)
if __name__ == '__main__':
    f = 'controller.__main__'
    app = PyQt5.QtWidgets.QApplication(sys.argv)
    itable = Table()
    itable.set_gui()
    itable.fill()
    itable.showMaximized()
    sys.exit(app.exec())

Центр помощи » Вложенные функции. Как записать уравнение равное нулю без символьного класса » Фев. 21, 2022 18:55:45

Привет! Ниже блок с кодом (вложенные функции), он работает, но результаты представляет в виде списка формул. До того, как я добавил строки 18-22 (добавление уравнения, равного нулю), вычисление занимало около 20-30 минут, и результат был отличным - по итогу были представлены варианты значений переменных. Но когда я добавил строки 18-22, вычисления стали бесконечными, и я вижу, что строка 21 выполняется часами. Результат выглядит так, как будто переменные из уравнения остаются символами, и вычисление не выполняется. Как изменить строки 18-22, чтобы избежать перевода переменных в класс символов? Помогите, пожалуйста


О моей цели: Для каждой из переменных с подчеркиванием установлен диапазон возможных значений, в пределах которого значения перебираются с заданным шагом. В этом блоке кода я пытаюсь учесть уравнения, содержащие неизвестные переменные, чтобы уменьшить исходные диапазоны возможных значений. После последней функции должны быть выведены окончательные комбинации значений (конкретные числа) для переменных (y00, y10, y20… y90_).

 step = -0.01
for y30_ in np.arange(y30[0], y30[1], step):
    y00_ = function_vr(ph0b, et0, y30_)
    y10_ = function_vn(ph0b, et0, y30_)
    y20_ = function_o(ph0, et0, y30_)
    #print(f"y00_ = {y00_}, y10_ = {y10_}, y20_ = {y20_}, y30_ = {y30_}")
    
    for y50_ in np.arange(y50[0], y50[1], step):
      #print(y50_)
      
      for y60_ in np.arange(y60[1], y60[0], step):
        tn0_ = funct_tn(y50_, y60_)
        #print(y60_)
        
        for y70_ in np.arange(y70[1], y70[0], step):
          y80_ = funct_labt(y30_, y60_, y70_, y50_)
          function_gam(et0, y30_, ph0b, y50_, y60_, y70_, y80_)
          ht0, et0, y30_, ph0b, y50_, y60_, y70_, y80_  = symbols('ht0 et0 y30_ ph0b y50_ y60_ y70_ y80_')
          equation = Eq(ht0, (y50_ * et0 * cos(y30_) / sqrt(ph0b) + y60_ * -et0 * sin(y30_) / sqrt(ph0b) + y70_ * sqrt(1 / ph0b) * et0 * sin(y30_) + y80_ * (sqrt(1 / ph0b) * (1 + et0 * cos(y30_)) * (1 + et0 * cos(y30_))**2) / ph0b**2))
          #Use sympy.subs() method
          ham0 = solve(equation.subs(ht0, 0))
          #print(ham0)
          
          for y90_ in np.arange(y90[1], y90[0], step):
            function_propulsion(y40, y50_, y60_, y90_, ptb, mqb)
            function_deo(y40, y50_, y60_, y90_, ptb, mqb, pes)
 
    print(f"y00_ = {y00_}, y10_ = {y10_}, y20_ = {y20_}, y30_ = {y30_}, y50_ = {y50_}, y60_ = {y60_}, y70_ = {y70_}, y80_ = {y80_}, y90_ = {y90_}")

Python для новичков » Openpyxl (ValueError: Style Consolas exists already) » Фев. 21, 2022 15:10:52

 class Excel:
    def __init__(self) -> None:
        self.wb = xl.Workbook()
        
        del self.wb['Sheet']
        self.consolas = NamedStyle(name='Consolas')
        self.consolas.font = Font(name='Consolas', size=10)
        self.consolas.alignment = Alignment(horizontal='center',vertical='center')
        # self.wb.active
        # self.file_name = 'unknown.xlsx'
    def file_exist(self, wb_name, ws_name):
        # проверяет на существование файла
        if os.path.isfile(wb_name) is True: # если файл существует 
            self.wb = load_workbook (wb_name) # то загружает его
            if ws_name in self.wb:
                self.wb.active
            else:
                self.wb.create_sheet(ws_name, 0)
                self.wb.active
        else:
            self.wb.create_sheet(ws_name, 0)
            self.wb.active
            self.wb.save(wb_name)
        return self.wb.save(wb_name)
    def last_column(self, wb_name, ws_name):
        self.wb = load_workbook (wb_name)
        self.ws = self.wb[ws_name]
        self.last_row = self.ws.max_row
        self.last_col = self.ws.max_column
        return self.last_col
    def col_writer(self, data_hat, data_meas, wb_name, ws_name):
        self.wb = load_workbook (wb_name)
        self.ws = self.wb[ws_name]
        self.last_row = self.ws.max_row
        self.last_col = self.ws.max_column
        for c_index, col in enumerate(data_hat, start=self.last_col+1):
            self.wb[ws_name].column_dimensions[get_column_letter(c_index)].width = 20
            for r_index, row in enumerate(col, start=1):
                self.wb[ws_name].cell(r_index, c_index, row)
        for c_index, col in enumerate(data_meas, start=self.last_col+1):
            for r_index, row in enumerate(col, start=11):
                self.wb[ws_name].cell(r_index, c_index, row)
            return self.wb.save(wb_name)
При выполнении функции (пытаюсь записать информацию в существующий лист Excel) получаю такую ошибку, как ее можно исключить не убирая форматирование?
File “d:\Documents\sample_editor\excel.py”, line 56, in col_writer
self.wb.add_named_style(self.consolas)
File “C:\Users\sss\AppData\Local\Programs\Python\Python39\lib\site-packages\openpyxl\workbook\workbook.py”, line 344, in add_named_style
self._named_styles.append(style)
File “C:\Users\sss\AppData\Local\Programs\Python\Python39\lib\site-packages\openpyxl\styles\named_styles.py”, line 193, in append
raise ValueError(“”“Style {0} exists already”“”.format(style.name))
ValueError: Style Consolas exists already

Python для новичков » Вычисления в Pandas по условию » Фев. 20, 2022 19:32:33

Здравствуйте! Есть датафрейм такого вида:
тикер SUMM BAY
0 Рыба 500 False
1 Рыба 444 True
2 Свинина 500 False
3 Говядина 300 True
4 Индейка 1000 False
5 Индейка 500 True

Как сделать вычисления по столбцу SUMM с условием Рыба Folse минус Рыба True ?

Python для новичков » Вычисления в Pandas по условию » Фев. 20, 2022 19:32:27

Здравствуйте! Есть датафрейм такого вида:
тикер SUMM BAY
0 Рыба 500 False
1 Рыба 444 True
2 Свинина 500 False
3 Говядина 300 True
3 Индейка 1000 False
3 Индейка 500 True

Как сделать вычисления по столбцу SUMM с условием Рыба Folse - Рыба True ?

Python для новичков » Помогите улучшить программу » Фев. 20, 2022 16:58:40

Привет, я новичек в питоне и нуждаюсь в вашей помощи))
Программа для чата в Дискорде
Мне нужно решить следующие задачи: прога
- пишит сообщения в Diskord (работает - пишит в разброс) берет сообщения из тест. фаила
- сообщения в последовательности
- стирает сообщения
- функция остановки программы и нового запуска не выключая прогу

Прикрепил файл с прогой и тестом
Буду рад если кто то откликнется и поможет))

Python для новичков » Ошибка при скачивании с ютуба » Фев. 20, 2022 16:09:10

IDLE (Python 3.10 64-bit)
Windows 10
—————————-
Есть скрипт:
 import pytube
import os
video_link = 'https://www.youtube.com/watch?v=d0XCoaiCXDw'
yt = pytube.YouTube(video_link)
path = 'C:\\Users\\Desktop\\01'
video.download(path)
Выдаёт ошибку:
Traceback (most recent call last):
File “C:\Users\Пк\Desktop\01\1.py”, line 8, in <module>
video.download(path)
NameError: name ‘video’ is not defined
Подскажите как исправить ?

Python для новичков » object.__new__() takes exactly one argument » Фев. 20, 2022 02:28:25

Я пытаюсь реализовать ecs в Python. Когда я создаю объект конкретного компонента через класс компонента ниже, то получаю ошибку “TypeError: object.__new__() takes exactly one argument (the type to instantiate)”. Я гуглил по поводу такой ошибки, но не помогло. Как работает этот object.__new__()?
Что я только не делал чтобы это заработало, прописывал *args **kwargs разными способами, даже прописывал super().__init__() в __init__() этого класса хоть я знал что ошибка точно не здесь так как до инициализации даже не доходит.

Я писал этот код по туториалу. В нем использовался python 2 и там все работало а на python 3 нет. Хотя я переписал под 3 версию, но он все равно не работает. Я понимаю что проблема может быть в методе super(), но я не знаю зачем нужен второй аргумент в этом методе, что он делает. Я даже в документации искал инфу про него но ее там просто нет (ну или по крайней мере инфа в очень не очевидном месте).

И так… почему происходит эта ошибка?

 class Component:
	
	defaults = dict()
	Catalog = dict()
	ComponentTypes = dict()
	def __new__(cls, entity=None):
		class_name = cls.__name__
		if class_name not in Component.ComponentTypes:
			Component.ComponentTypes[class_name] = cls
			cls.Catalog = dict()
		if entity not in cls.Catalog:
			component = super(Component, cls).__new__(cls, entity=entity)
		else:
			component = cls.Catalog(entity)
			
		return component
	def __init__(self, entity=None):
		self.entity = entity
		for prop, val in self.default.items():
			setattr(self, prop, properties.get(prop, val))

Python для новичков » Возможна ли эмуляция работы мыши или нажатия клавиш на заблокированном компе? » Фев. 18, 2022 19:50:47

Дано: ночью на заблокированном компе нужно открыть сайт, заполнить форму и скачать отчет.
Имеем:
Сделал автоматизацию в pyautogui заполнения формы в браузере в двух вариантах: мышью и клавишами.
Оба варианта рабочие на незаблокированном компьютере. При блокировке (win+L) планировщик запускает программы main.py: в первом случае мышь елозит по экрану блокировки и соотв. в браузере ничего не кликается, во втором варианте нужная страница открывается на заблокированном компе, но эмуляция нажатия клавиш не срабатывает - переключения между строками формы не происходит и значения в выпадающих списка не выбираются.
Что можно придумать?

Центр помощи » работа с pivot_table » Фев. 18, 2022 09:53:13

Всем добрый день! Подскажите, пожалуйста, Есть задача:

pivot_position = df.loc[df.isin()].pivot_table(values = _______,
index=,
columns=,
aggfunc='sum',
margins=True,
fill_value=0)

так вот, что мне нужно задать в ‘values’ для подсчета количества данных, которые указаны в index?
никак не могу понять. Спасибо!

Центр помощи » Задача » Фев. 17, 2022 16:43:08

Натуральное число называется совершенным, если оно равно сумме всех своих делителей, не равных самому числу. Найдите все совершенные числа, меньшие данного натурального числа n.
Алгоритмом пожалуйста!

Центр помощи » Задача  » Фев. 17, 2022 16:35:59

Найти сумму 1+4+7+11+…+11
Алгоритмом пожалуйста!

GUI » Отправка в Serial с задержкой в PyQt5. » Фев. 17, 2022 16:07:07

Поставил перед собой такую задачу. На питоне при помощи PyQt5 создал программу с GUI. В данной программе присутствует кнопка, при нажатии на которую в Serial отправляются данные из файла построчно. При этом, если очередная строка начинается с символа “z”, необходимо создать задержку отправления сообщения, и эта задержка должна быть длиной в цифру, идущую после “z”, а потом продолжить отправление следующих строк.
содержимое файла command.txt:
a150;
b50;
c0;
z900;
a180;
b0;
c180;
z1500;
a0;
b0;
z150;

[code python]
# Функция чтения команд из файла
def text_command():
file = open('command.txt')
commands = file.readlines()
for line in commands:
if line[0] == 'z':
line = line.replace('z','')
line = line.replace(';', '')
line = line.replace('\n', '')
QtCore.QTimer.singleShot(int(line), text_command)
else:
line = line.replace('\n', '')
serial.writeData(str(line).encode())
file.close
ui.pushButton.clicked.connect(text_command)
[/code]


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

Первый мой вопрос на форуме в процессе обучения, если оформил неправильно или непонятно объяснил свою задачу - исправлюсь.

ОС Windows7
Python 3.8
PyQt5 5.15.6

Python для новичков » Некорректно работает БОТ в группе » Фев. 15, 2022 07:30:18

Добрый день,подскажите,если может кто.Написал бота,засунул его в группу из нескольких людей.При этом,если лично писать боту - дает ответ,если в группе,обращаясь к нему по имени нет..Какие настройки можно проверить?
Смотрел privacy
Ставлю Enabled - молчит в группе.
Ставлю Disabled - даже на любое сообщение и даже не к нему что-то отвечает

Центр помощи » Запрос через прокси » Фев. 14, 2022 22:17:58

 def getInternet():
    try:
        try:
            requests.get('https://www.google.com')
        except requests.ConnectTimeout:
            requests.get('http://1.1.1.1')
        return True
    except requests.ConnectionError:
        return False
lock = threading.Lock()
if getInternet() == True:
    dictionary = requests.get(
        'https://mail.ru').text.strip().split('\n')
else:
    pass
def getNew(addr):
    try:
        response = requests.get(
            f'https://ya.ru')
        return (
            response.json()
        )

Помогите добавить в код прокси. Нужно чтобы запрос который идёт на https://ya.ru шел через прокси.

Python для новичков » PyCharm » Фев. 13, 2022 02:32:25

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

Python для новичков » Работа с эксель » Фев. 12, 2022 21:06:32

Здравствуйте!
Почему код выдает не сумму значений столбца А (sum_a_calls) в данном случае, а каждое значение списка?
[code python]                            for i in selfcalls: # перебираем значения колонок цен и страйков
sum_a_calls += i['A'] # значения цен
sum_i_calls += i['I'] # значение страйков
sp_calls_ai += i['A'] * i["I"] # все значения А и I перемножаются
sp_calls_i += i["I"]
up_level = sp_calls_ai / sp_calls_i / 10000
print(sum_a_calls)
if i['A'] < 11000: ################# не работает
sum_low_calls_a += i['A']
sum_low_calls_i += i['I']
sp_low_calls_ai = sp_low_calls_ai + i['A'] * i["I"]
sp_low_calls_i += i["I"]
down_balance_level = sp_low_calls_ai / sp_low_calls_i / 10000[/code]
Файл со всем кодом и обрабатываемым файлов во вложении.
Как добавить условие по колонке А для выбора части массима (например меньше значения 11000)

Python для новичков » Повторно не открывается окно TKinter » Фев. 11, 2022 20:17:51

Я пишу своего ассистента, в котором если команда равна “Список команд”, приложение выводит на экран список всех команд, но при повторном вызове этого окна возникает ошибка:
Traceback (most recent call last):
File “Voice Assistant 1.0.0.py”, line 332, in <module>
File “tkinter\__init__.py”, line 2255, in wm_title
_tkinter.TclError: can't invoke “wm” command: application has been destroyed
Вот тот фрагмент кода:
 elif voice_input == "список команд" or voice_input == "помощь":
    canvas = Canvas(tk, width=500, height=560)
    canvas.pack()
    tk.title("List of commands")
    canvas.create_text(70, 20, text="1. Расскажи о себе")
    #там много строк, поэтому оставил только одну
    tk.mainloop()
Мне необходимо, чтобы это окно можно было вызывать бесконечное количество раз, прошу помогите!!!

Центр помощи » У меня трудность в решении одной проблемы на Python » Фев. 11, 2022 18:52:29

Добрый вечер, участники форума! На данный момент я пишу бота для discord. Возможно-ли проиграть какой-либо звук и сразу вывести текст?
Например команда для вывода текста:
@bot.command()
async def siu(ctx):
await ctx.send(“siuu!”)

И когда бот напишет “siuu!” в чате, проигрывался всеми известный звук с Криштиано Роналдо. Заранее спасибо за помощь!

Базы данных » Работа с триггерами через Firebirdsql » Фев. 10, 2022 23:32:49

Потратил неделю на поиски решения проблемы самостоятельно. Силы и терпение иссякли.
Ситуация такая:
1. Пишу простой питоновский скрипт для работы с базой данных Firebird, который собираюсь разместить на сервере Pythonanywhere.
2. База находится на стороннем сервере (доступ к нему через SSH есть)
3. Задача слушать события БД (от заранее созданного триггера в БД - создание новой записи) и по факту такого события осуществить ряд действий.

Итог:
1. Тунель запустил
2. К базе подключился
3. SQL запросы к БД работают (вытащит инфу могу)
4. На локале работает и event_conduit (работа триггера четко отслеживается)
5. Но только размещаю скрипт на Pythonanywhere - первых 3 пункта работают, а 4 (именно выполнение метода event_conduit) вызывает ошибку сокета и разрыв связи с БД.

Выглядит так:
Traceback (most recent call last):
File “trigger.py”, line 53, in <module>
event = con.event_conduit(, timeout=10)
File “/home/agmorev/.local/lib/python3.8/site-packages/firebirdsql/fbcore.py”, line 795, in event_conduit
return EventConduit(self, event_names, timeout)
File “/home/agmorev/.local/lib/python3.8/site-packages/firebirdsql/fbcore.py”, line 492, in __init__
self.sock = SocketStream(ip_address, port, timeout)
File “/home/agmorev/.local/lib/python3.8/site-packages/firebirdsql/socketstream.py”, line 46, in __init__
self._sock = socket.create_connection((host, port), timeout)
File “/usr/lib/python3.8/socket.py”, line 807, in create_connection
raise err
File “/usr/lib/python3.8/socket.py”, line 796, in create_connection
sock.connect(sa)
socket.timeout: timed out

НА ЛОКАЛЬНОЙ МАШИНЕ ВСЕ РАБОТАЕТ

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