Форум сайта python.su
суть проблемы следующая, есть неизвестное заранее количество QThread потоков (думаю не более 100) и тот с которым в данный момент времени работает юзер должен иметь возможность управлять виджетами, это согласно кутэшной доке надо делать через сигналы
если делать так то проблем не возникает
class signaler(QMainWindow): si1 = Signal(bool) si2 = Signal(int)
class gui(QMainWindow): # ПРЕДПОЛОЖИМ ЧТО МЫ ВЫЧИСЛИЛИ НЕОБХОДИМОСТЬ В 10 ПОТОКАХ signals_lst = [Signal(bool) for x in range(10)]
AttributeError: 'PySide2.QtCore.Signal' object has no attribute 'connect'
class signaler(QMainWindow): pause_signals_lst = list() def __init__(self, parrent = None): QMainWindow.__init__(self, parrent) for x in range(10): # ПРЕДПОЛОЖИМ ЧТО МЫ ВЫЧИСЛИЛИ НЕОБХОДИМОСТЬ В 10 ПОТОКАХ signame = str(x) + str(time.time()) # рандомное имя setattr(signaler, signame, Signal(bool)) # добавляем в класс сигнал signaler.pause_signals_lst.append(getattr(signaler, signame))# а теперь поместим сигнал в список
Офлайн
@cckyi_boxxx мне кажется вы пытаетесь вырвать гранды через анус. Зачем вам 100+ сигналов? достаточно одного, у каждого инстанса потока будет свой сигнал, котороый будет конектиться к нужному слоту. Или я чегото не понимаю?
[code python][/code]
Офлайн
PEHDOM
@cckyi_boxxx мне кажется вы пытаетесь вырвать гранды через анус.
Офлайн
@cckyi_boxxxУ тебя код такой, будто ты питон не знаешь совсем. Думаю, тебе надо изучить питон сначала. Сомневаюсь, что без знания питона ты сможешь написать правильно многопоточную программу на питоне.
попробовал обойти это ограничение следующим образом
@cckyi_boxxxВот тут у тебя имя класса signaler записано со строчной буквы, а это нарушение PEP8 имена классовclass signaler(QMainWindow):
@cckyi_boxxxОбычно это записывается вот такpause_signals_lst = list()
pause_signals_lst = []
@cckyi_boxxxА в идеале ты должен знать, что ты делаешь, ещё до запуска программы. И ошибки тоже видеть ещё до запуска программы. И чтобы это было вот так, надо читать книги и тренироваться после прочтения. А действуя наугад, ты только время потеряешь.
но когда пытался сконнектить их к обработчикам получил ошибку
Отредактировано py.user.next (Апрель 3, 2020 01:19:36)
Офлайн
py.user.next, про требования PEP8 мне известно, но меня они не устраивают, и я сознательно их игнорирую и пишу код как мне удобно, чаще всего нарушаю правило о 80-и символах на строку так как люблю обзывать переменные достаточно длинными именами например так self.conw_thread_selected_not_run_mask что-бы в названии было понятно зачем она создана. Да и ограничение на вложенность тоже игнорю. И по сути PEP8 лишь рекомендации а не жесткие правила, и полагаю когда работаешь не в команде и правки твоего кода другими людьми не предполагаются, а в моем случае даже нежелательны, можно забить на PEP8.
Как можно не знать, что list() и - это одно и то же?ну а тут по-моему все совсем просто, пусть list() и предназначен в первую очередь для конверсии в список других типов, но
print(list() == [])
Так что очень сомнительно, что ты можешь понять архитектуру оконного приложения на Qt или PySide. Ты просто наугад будешь ставить строчки в разные места и ориентироваться по признаку “запустилась ли программа”.
Отредактировано @cckyi_boxxx (Апрель 3, 2020 13:04:57)
Офлайн
@cckyi_boxxxЭти рекомендации выработаны несколькими сотнями профессионалов с большим опытом. Никого не интересует, что тебе там нравится. Как только ты выложил код на всеобщее обозрение и попросил его прочитать кого-то, ты сразу же столкнулся с тем, что тебе предлагают привести его в общепринятый вид. Тебе удобно одно, другому удобно другое, третьему удобно третье и всё это затормаживает обмен идеями, потому что вместо обсуждения алгоритмов сначала пытаются разобраться в коде.
И по сути PEP8 лишь рекомендации а не жесткие правила
@cckyi_boxxxВот ты не думал, почему класс QMainWindow называется именно так? Он так называется, чтобы ты сразу по его имени видел, что это класс, а не переменная или функция или ещё какой-то объект.class signaler(QMainWindow):
result = signaler()
def signaler(): return 'somevalue' result = signaler()
@cckyi_boxxxНо по факту-то ты ошибки получаешь. Неужели ты в доке прочитал, как нужно с ошибками писать? Вряд ли. Вот когда пробелы в знаниях есть и из-за этого ты пытаешься наугад что-то там лепить, тогда и возникают ошибки, по которым даже ничего не скажешь, потому что на них не написано, из-за чего они произошли.
я действую другим способом, ставлю задачу, ищу либу под нее, читаю доку на либу или ее часть и затем использую
Отредактировано py.user.next (Апрель 3, 2020 14:20:52)
Офлайн
py.user.next, спасибо, учту, как минимум для того кода который выкладывается на всеобщее обозрение
Но по факту-то ты ошибки получаешь. Неужели ты в доке прочитал, как нужно с ошибками писать? Вряд ли. Вот когда пробелы в знаниях есть и из-за этого ты пытаешься наугад что-то там лепить, тогда и возникают ошибки, по которым даже ничего не скажешь, потому что на них не написано, из-за чего они произошли.Сурово, но справедливо, ошибки с опытом уйдут, сейчас его мало, но это сейчас. А пока приходится обращаться за помощью к вашему сообществу, в тех случаях когда слишком долго бьюсь сам.
Офлайн