2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Получить сведения об атрибуте в функции-слоте. PyQt5.
Сообщение16.02.2020, 16:15 


21/02/19
108
Здравствуйте. Пишу программу простейшего калькулятора. Для размещения кнопок в QGridLayout создал их в цикле, и добавил каждую кнопку в качестве значения словаря, ключи которого - надписи на кнопках:
код: [ скачать ] [ спрятать ]
Используется синтаксис Python
names = ['Cls', 'Bck', '', 'Close',
                 '7', '8', '9', '/',
                 '4', '5', '6', '*',
                 '1', '2', '3', '-',
                 '0', '.', '=', '+']

        positions = [(i,j) for i in range(1,6) for j in range(4)]

        buttons = {}
        for position, name in zip(positions, names):
            if name == '':
                continue
            btn = QPushButton(name)
            buttons[name] = btn
            grid.addWidget(btn, *position)
 


Теперь хочу обработать сигналы от кнопок с цифрами. Для этого создал строковую переменную first_number, к которой буду прибавлять цифру нажатой кнопки. Соответственно метод обработки сигнала для кнопок будет выглядеть как:
Используется синтаксис Python
buttons[name].clicked.connect(ex.digits)
 


Создаю слот для обработки сигнала:
Используется синтаксис Python
@pyqtSlot(name = "digits")
def on_clicked_digits(self):
    first_number += ...
 


И вот здесь возникла проблема. Как можно получить ключ словаря, кнопка, соответствующая которому, была нажата?

 Профиль  
                  
 
 Re: Получить сведения об атрибуте в функции-слоте. PyQt5.
Сообщение16.02.2020, 16:25 
Аватара пользователя


29/05/17
808
Предлагаю воспользоваться ютубом:
https://www.youtube.com/watch?v=PzwXT8hdFqM
Такие проги уже миллион раз были написаны.

 Профиль  
                  
 
 Re: Получить сведения об атрибуте в функции-слоте. PyQt5.
Сообщение16.02.2020, 16:37 


21/02/19
108
Mental в сообщении #1440036 писал(а):
Такие проги уже миллион раз были написаны.

Спасибо за ссылку, правда там калькулятор переводит число в другую систему счисления, но да ладно.
У меня вопрос не о том, как написать калькулятор, а как решить конкретную мини-задачу на pyqt5.

 Профиль  
                  
 
 Re: Получить сведения об атрибуте в функции-слоте. PyQt5.
Сообщение17.02.2020, 00:04 
Заслуженный участник


27/04/09
28128
optimden в сообщении #1440033 писал(а):
Как можно получить ключ словаря, кнопка, соответствующая которому, была нажата?
То есть обратить buttons? Тогда это не связано с PyQt, и тут лучше не обращать словарь каждый раз, а заполнить обратный словарь тогда же когда заполняется и buttons:

Используется синтаксис Python
        buttons = {}
        buttons_inv = {}
        for position, name in zip(positions, names):
            # ...
            buttons[name] = btn
            buttons_inv[btn] = name
            # ...

В принципе можно создать подкласс UserDict, который содержал бы обратный словарь, добавлял бы в него при добавлении в основной автоматически и имел бы способ индексировать задом наперёд и может ещё какие плюшки; а можно оставить и так, если бы такой двойной словарь нигде больше не нужен.

 Профиль  
                  
 
 Re: Получить сведения об атрибуте в функции-слоте. PyQt5.
Сообщение17.02.2020, 01:09 
Заслуженный участник
Аватара пользователя


01/09/13
4666
Как я понимаю, вопрос в том как узнать "отправителя" сигнала...

 Профиль  
                  
 
 Re: Получить сведения об атрибуте в функции-слоте. PyQt5.
Сообщение17.02.2020, 01:28 
Заслуженный участник


27/04/09
28128
А, ну он же должен как-то передаваться в GUI-то фреймворках. Я думал, это уже решено. И это точно должно быть там, ибо без такой возможности фреймворк теряет уйму случаев применимости, а реализовать такое несложно. И если дело за этим, тут скорее поможет документация, а именно часть, поминающая что-то типа event handlers.

 Профиль  
                  
 
 Re: Получить сведения об атрибуте в функции-слоте. PyQt5.
Сообщение17.02.2020, 01:47 
Заслуженный участник
Аватара пользователя


01/09/13
4666
Вот в документации я этого и нашёл...

 Профиль  
                  
 
 Re: Получить сведения об атрибуте в функции-слоте. PyQt5.
Сообщение17.02.2020, 10:12 


31/05/11
32
https://doc.qt.io/qt-5/qobject.html#sender

 Профиль  
                  
 
 Re: Получить сведения об атрибуте в функции-слоте. PyQt5.
Сообщение17.02.2020, 11:48 
Заслуженный участник
Аватара пользователя


01/09/13
4666
Спасибо большое!

 Профиль  
                  
 
 Re: Получить сведения об атрибуте в функции-слоте. PyQt5.
Сообщение17.02.2020, 12:03 


21/02/19
108
Спасибо всем за ответы. Проблема была именно в том, чтобы использовать обработчик с параметром. Думал, что можно как-то передать слоту параметр. Но в итоге просто сделал новый класс, и в качестве обработчика вызвал его экземпляр, которому и передал параметр.

 Профиль  
                  
 
 Re: Получить сведения об атрибуте в функции-слоте. PyQt5.
Сообщение17.02.2020, 12:13 
Заслуженный участник
Аватара пользователя


01/09/13
4666
К своему сигналу можно прицепить сколько угодно параметров.
Но конструируя длинную цепочку ретрансляторов хотелось бы быть уверенным, что в конце этой цепочки сигналы будут обработаны в правильном порядке.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group