Название: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: Пытон от Января 14, 2012, 10:06 Форма создана в QtDesigner. Загружена посредством модуля uic. Как мне теперь добраться до виджетов на этой форме? Как мне узнать, что, допустим, в каком-нибудь QListWidget пользователь нажал на клавишу "вниз" и обработать сие замечательное событие? Куды я должен впихнуть def event(self, e)?
Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: mutineer от Января 14, 2012, 11:01 До виджетов добраться просто - myform.myWidget
event надо засовывать в виджет, ивенты которого хочешь обрабатывать. Ну или сигналы/слоты)) Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: Пытон от Января 14, 2012, 12:44 Как я засуну event в виджет, если я не создавал его код в своей программе? Не писал никакой свой класс основанный на каком-нибудь виджете.
Если советом будет: "так напиши" - то зачем нужен тогда дизайнер форм? Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: kambala от Января 14, 2012, 12:54 Если советом будет: "так напиши" - то зачем нужен тогда дизайнер форм? чтобы наглядно создавать форму, а не писать её ручками. а вот логику ты ж не опишешь в дизайнере :)Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: mutineer от Января 14, 2012, 12:59 Как я засуну event в виджет, если я не создавал его код в своей программе? Подпишись на нужные сигналы интересующих тебя виджетов Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: Пытон от Января 14, 2012, 14:18 Цитировать Подпишись на нужные сигналы интересующих тебя виджетов Это как - подпишись? Вдобавок, какой сигнал, допустим у QListWidget, позволит определить, что пользователь нажал на клавиатуре клавишу "А"? Насколько я в курсе, подобное можно определить, только переопределяя функции в классах. Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: Bepec от Января 14, 2012, 14:22 Пытон. Есть такая там функция Promote to...
Для переопределения функции нажатия класса, нужно полминуты времени ;) Или 15 минут чтения документации. Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: mutineer от Января 14, 2012, 15:41 Это как - подпишись? Подпишись - это QObject::connect() В питонах, вероятно, это QtCore.QObject.connect() Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: kambala от Января 14, 2012, 15:49 ну вообще-то для отлавливания нажатий клавиш надо не на сигнал подписываться, а переопределять метод keyPressEvent()
Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: Пытон от Января 14, 2012, 15:59 ну вообще-то для отлавливания нажатий клавиш надо не на сигнал подписываться, а переопределять метод keyPressEvent() Ну, дык, подскажите кто-нибудь мне болезному, как я его переопределю-то??? Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: Пытон от Января 14, 2012, 16:03 Пытон. Есть такая там функция Promote to... Для переопределения функции нажатия класса, нужно полминуты времени ;) Или 15 минут чтения документации. Насколько я понял, сие есть создание нового виджета для использования в QtDesigner'e. Чтоб можно было его там мышкой на форму налепить. Да не нужно мне это в данный момент. Мне нужно определить нажатие на клавишу "А", в стандартном виджете QtListWidget, который я налепил на форму в дизайнере, но в своей программе ОЧЕНЬ хочу узнать про клавишу "А" в этом чёртовом виджете. Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: Пытон от Января 14, 2012, 16:10 Код
Во чего хочу. modify я, естественно, придумал. Но очень хочется чтобы она такая была... Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: kambala от Января 14, 2012, 16:18 ну так я ж не специалист по питону, недавно только туториал на оф. сайте прочёл :) но основная идея такая: создать класс-наследник QListWidget, в нём переопределить метод keyPressEvent, а там написать (не гарантирую корректность синтаксиса)
Код а в дизайнере промоутнуть QListWidget на своей форме до вот этого класса Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: Пытон от Января 14, 2012, 16:29 Я в курсе как сделать обработку нажатия на клавишу в собственном классе-наследнике. Если я сам, ручками, написал класс-наследник я без проблем определю ему функцию-обработчик нажатия на клавишу; но я такой вот редиска и нехороший человек решил этот разнесчастный виджет налепить на форму в дизайнере.
На кой нужен дизайнер, если я не могу потом спокойно воспользоваться всеми возможностями виджетов на форме??? Не могу никакому виджету переопределить методы? Получается, для того, чтобы просто узнать о нажатии на клавишу в листвиджете, я сперва должен создать свой класс в отдельной python-программе, затем засунуть его в дизайнер, там налепить свой класс-виджет на форму, сохранить, загрузить ui-файл в форму в своей другой python-программе, а если понадобиться что-то подкорректировать в методе провести всю эту чудесную процедуру заново и охренеть, простите... Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: mutineer от Января 14, 2012, 16:36 Дизайнер нужен, чтобы быстро набросать простой интрефейс. Он не дает и не может дать всех возможностей, которые можно сделать кодом
Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: Bepec от Января 14, 2012, 18:16 Пытон, ты читаешь между строк.
Тебе нужно: 1. поставить стандартный (стандартный) виджет на форму. 2. потом создать 1 файл, в котором ты создашь класс - наследник от QListWidget(или любого другого виджета) 3. в этом файле переопределяешь 1 функцию (keyPressReleased к примеру) 4. далее, в Designer'e щелкаешь на виджете - Promote to... 5. пишешь там название своего файла. 6. запускаешь и радуешься тому, что твой QListWidget перехватывает отжатия клавиш. PS ты ручками много напишешь, а вот если нужно будет сделать как надо дизайнеру, ты укопечёшься кодом переписывать. А так дал ему ui, пусть тягает как хочет. Хоть туда, хоть обратно, но программа у тебя меняться не будет никоим образом. Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: Пытон от Января 14, 2012, 19:24 Эдак у меня будет два py-файла вместо одного. При редактировании программы оба файла нужно будет держать открытыми.
Попробую завтре. Поглядим насколько это удобно... :-\ Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: Bepec от Января 14, 2012, 20:21 Понимаешь, в коде создавать все виджеты это хорошо.
Но как только начнётся - сдвинь на 2 мм вправо один, второй расширь на ... ммм, вот столько *показывает пальцами*, а потом покажи мне я ещё что нить скажу :) Это норм, если прога твоя без дизайнера или маркетолога разрабатывается. А вот у мну на каждую поправку служебку приносят :D Я её оприходываю, добавляю изменения(две цифры), составляю ответ на служебку, отправляю. А если понравится на данный момент, то всё это нужно оформлять в архив :D А через пару дней, когда новую версию посмотрят наконец, всё заного, только мм в другую сторону :D Гораздо проще пригласить к себе маркетолога на часик ^^ И за 10 минут всё переделать, без изменения исходного кода и дооолгих компиляций. Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: Пытон от Января 14, 2012, 21:54 Я программист-любитель, и хоть мои программы и используются в реальной работе, меня такие ужасы не касаются. :o
Насчёт "в коде создавать все виджеты - это хорошо". Дык я и хочу их создавать не в коде, а в дизайнере, а в коде лишь подпиливать их напильничком: методы им переопределять. Да только вон тут (в Qt) какие заковырки. Которые завтра буду опробовать... Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: Пытон от Января 14, 2012, 21:56 Кстати, питон - интерпретируемый язык - никакие долгие компиляции мне не страшны [дразнится] ;)
Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: mutineer от Января 14, 2012, 22:10 Да только вон тут (в Qt) какие заковырки. Которые завтра буду опробовать... Ну, справедливости ради, это заковыки не в Qt, а в ООП Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: Bepec от Января 14, 2012, 22:19 Пытон, будет у тебя проект строчек эдак на 250,000 тогда поймёшь что такое долгая компиляция :D
Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: Пытон от Января 14, 2012, 22:44 Пытон, будет у тебя проект строчек эдак на 250,000 тогда поймёшь что такое долгая компиляция :D Ты в курсе что такое "интерпретируемый язык"? Он не компилируется, он интерпретируется. Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: Bepec от Января 14, 2012, 23:07 покомандное выполнение программы интерпретатором без предварительной компиляции, «на лету»; обычно такой процесс медленнее работы предварительно скомпилированного кода, но для небольших программ, не требуя затрат времени на компиляцию, может повышать общую производительность.
В принципе основу я знал :) Теперь просветился точнее... к сожалению в проекте на 250000 строк быстродействие... как бы желательно. Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: andrew.k от Января 15, 2012, 00:41 Я не дочитал эту демагогию до конца, но по-моему то что ты хочешь получить даст тебе использование eventFilter.
Добавь для нужного виджета (QListWidget) eventFilter И тогда не нужно будет ничего промоутить и красивее будет. Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: mutineer от Января 15, 2012, 01:02 Разве можно поставить фильтр на уже готовый виджет? вроде он в наследнике аппликейшена пишется
Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: andrew.k от Января 15, 2012, 01:11 Разве можно поставить фильтр на уже готовый виджет? вроде он в наследнике аппликейшена пишется можно.фильтр можно поставить на любой виджет, на который у тебя есть указатель. Открой ассистент. Код
Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: mutineer от Января 15, 2012, 01:14 блин, не нашел, потому что искал у QWidget. не думал что оно аж из объекта тянется
Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: Пытон от Января 15, 2012, 11:43 Код
Вот так выглядит такая кака как eventFilter в питоне. Высмотрел пример в одном листинге, но он был без пояснений. Подскажите, что за id принимает класс-фильтр? В том листинге строка с installEventFilter была продублирована дважды, отличаясь только номерами id (1 и 2 соответственно). Это зачем? А также: кому и чего возвращает return? Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: mutineer от Января 15, 2012, 13:01 Цитировать The eventFilter() function must return true if the event should be filtered, (i.e. stopped); otherwise it must return false. То есть возвращается результат фильтрования (надо ли продолжать обработку события). В данном случае возвращается результат фильтр по умолчанию.Что за id хз, видимо что-то специфическое для примера Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: interv от Января 16, 2012, 12:25 Код: #ifndef MyListWidget_H На дизайнере форме: РайтКлик на листвьюве -> Преобразованные виджеты -> Дальше если ты не в танке то разберешся Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: Пытон от Января 22, 2012, 18:07 Я в танке, ибо пишу на питоне и в Сях ни в зуб ногой.
Название: Re: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши? Отправлено: Bepec от Января 26, 2012, 20:25 Если ты в танке, тогда закрывай смотровую щель и выжимай газ.
Тебе люди уже объяснили раза по 3, что надо делать, а ты даж ухи не почистил :) |