Russian Qt Forum
Июнь 16, 2024, 00:14 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: myform = uic.loadUi("uifile.ui"). А как теперь обрабатывать нажатия на клавиши?  (Прочитано 12683 раз)
Пытон
Гость
« : Январь 14, 2012, 10:06 »

Форма создана в QtDesigner. Загружена посредством модуля uic. Как мне теперь добраться до виджетов на этой форме? Как мне узнать, что, допустим, в каком-нибудь QListWidget пользователь нажал на клавишу "вниз" и обработать сие замечательное событие? Куды я должен впихнуть def event(self, e)?
Записан
mutineer
Гость
« Ответ #1 : Январь 14, 2012, 11:01 »

До виджетов добраться просто - myform.myWidget
event надо засовывать в виджет, ивенты которого хочешь обрабатывать. Ну или сигналы/слоты))
Записан
Пытон
Гость
« Ответ #2 : Январь 14, 2012, 12:44 »

Как я засуну event в виджет, если я не создавал его код в своей программе? Не писал никакой свой класс основанный на каком-нибудь виджете.

Если советом будет: "так напиши" - то зачем нужен тогда дизайнер форм?
« Последнее редактирование: Январь 14, 2012, 12:46 от Пытон » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #3 : Январь 14, 2012, 12:54 »

Если советом будет: "так напиши" - то зачем нужен тогда дизайнер форм?
чтобы наглядно создавать форму, а не писать её ручками. а вот логику ты ж не опишешь в дизайнере Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
mutineer
Гость
« Ответ #4 : Январь 14, 2012, 12:59 »

Как я засуну event в виджет, если я не создавал его код в своей программе?

Подпишись на нужные сигналы интересующих тебя виджетов
Записан
Пытон
Гость
« Ответ #5 : Январь 14, 2012, 14:18 »

Цитировать
Подпишись на нужные сигналы интересующих тебя виджетов

Это как - подпишись?
Вдобавок, какой сигнал, допустим у QListWidget, позволит определить, что пользователь нажал на клавиатуре клавишу "А"?

Насколько я в курсе, подобное можно определить, только переопределяя функции в классах.
« Последнее редактирование: Январь 14, 2012, 14:20 от Пытон » Записан
Bepec
Гость
« Ответ #6 : Январь 14, 2012, 14:22 »

Пытон. Есть такая там функция Promote to...

Для переопределения функции нажатия класса, нужно полминуты времени Подмигивающий Или 15 минут чтения документации.
Записан
mutineer
Гость
« Ответ #7 : Январь 14, 2012, 15:41 »

Это как - подпишись?

Подпишись - это QObject::connect()
В питонах, вероятно, это QtCore.QObject.connect()
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #8 : Январь 14, 2012, 15:49 »

ну вообще-то для отлавливания нажатий клавиш надо не на сигнал подписываться, а переопределять метод keyPressEvent()
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Пытон
Гость
« Ответ #9 : Январь 14, 2012, 15:59 »

ну вообще-то для отлавливания нажатий клавиш надо не на сигнал подписываться, а переопределять метод keyPressEvent()

Ну, дык, подскажите кто-нибудь мне болезному, как я его переопределю-то???
Записан
Пытон
Гость
« Ответ #10 : Январь 14, 2012, 16:03 »

Пытон. Есть такая там функция Promote to...

Для переопределения функции нажатия класса, нужно полминуты времени Подмигивающий Или 15 минут чтения документации.

Насколько я понял, сие есть создание нового виджета для использования в QtDesigner'e. Чтоб можно было его там мышкой на форму налепить.

Да не нужно мне это в данный момент. Мне нужно определить нажатие на клавишу "А", в стандартном виджете QtListWidget, который я налепил на форму в дизайнере, но в своей программе ОЧЕНЬ хочу узнать про клавишу "А" в этом чёртовом виджете.
Записан
Пытон
Гость
« Ответ #11 : Январь 14, 2012, 16:10 »

Код
Python
myform = uic.loadUi("form.ui")
 
modify class myform.myQListWidget:
   def keyPressEvent(self, e):
       print (e.text())
 

Во чего хочу.
modify я, естественно, придумал. Но очень хочется чтобы она такая была...
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4732



Просмотр профиля WWW
« Ответ #12 : Январь 14, 2012, 16:18 »

ну так я ж не специалист по питону, недавно только туториал на оф. сайте прочёл Улыбающийся но основная идея такая: создать класс-наследник QListWidget, в нём переопределить метод keyPressEvent, а там написать (не гарантирую корректность синтаксиса)
Код
Python
if e.key() == Qt.Key_A:
   # делаешь что тебе нужно
else:
   super.keyPressEvent(self, e)
а в дизайнере промоутнуть QListWidget на своей форме до вот этого класса
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Пытон
Гость
« Ответ #13 : Январь 14, 2012, 16:29 »

Я в курсе как сделать обработку нажатия на клавишу в собственном классе-наследнике. Если я сам, ручками, написал класс-наследник я без проблем определю ему функцию-обработчик нажатия на клавишу; но я такой вот редиска и нехороший человек решил этот разнесчастный виджет налепить на форму в дизайнере.

На кой нужен дизайнер, если я не могу потом спокойно воспользоваться всеми возможностями виджетов на форме??? Не могу никакому виджету переопределить методы? Получается, для того, чтобы просто узнать о нажатии на клавишу в листвиджете, я сперва должен создать свой класс в отдельной python-программе, затем засунуть его в дизайнер, там налепить свой класс-виджет на форму, сохранить, загрузить ui-файл в форму в своей другой python-программе, а если понадобиться что-то подкорректировать в методе провести всю эту чудесную процедуру заново и охренеть, простите...
Записан
mutineer
Гость
« Ответ #14 : Январь 14, 2012, 16:36 »

Дизайнер нужен, чтобы быстро набросать простой интрефейс. Он не дает и не может дать всех возможностей, которые можно сделать кодом
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.068 секунд. Запросов: 21.