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
818
Предлагаю воспользоваться ютубом:
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
4744
Как я понимаю, вопрос в том как узнать "отправителя" сигнала...

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


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

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


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

 Профиль  
                  
 
 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
4744
Спасибо большое!

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


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

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


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

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

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



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

Сейчас этот форум просматривают: Dmitriy40


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

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