Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PyQT QtCore.QObject.connect, подскажите более изящное решение 
V
    Опции темы
MaoDzeDunUA
  Дата 13.12.2009, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 20.9.2009

Репутация: нет
Всего: нет



Здравствуйте, господа!
Делаю на pyqt экранную клавиатуру, которая состоит из 10 цифр. Вся клавиатура - это 10 QPushButton-ов.
Дабы это все заработало, делаю такие связи сигнал-слот
Код

QtCore.QObject.connect(self.ui.button1,QtCore.SIGNAL("clicked()"), self.addDigit1)
QtCore.QObject.connect(self.ui.button2,QtCore.SIGNAL("clicked()"), self.addDigit2)
QtCore.QObject.connect(self.ui.button3,QtCore.SIGNAL("clicked()"), self.addDigit3)
QtCore.QObject.connect(self.ui.button4,QtCore.SIGNAL("clicked()"), self.addDigit4)
QtCore.QObject.connect(self.ui.button5,QtCore.SIGNAL("clicked()"), self.addDigit5)
QtCore.QObject.connect(self.ui.button6,QtCore.SIGNAL("clicked()"), self.addDigit6)
QtCore.QObject.connect(self.ui.button7,QtCore.SIGNAL("clicked()"), self.addDigit7)
QtCore.QObject.connect(self.ui.button8,QtCore.SIGNAL("clicked()"), self.addDigit8)
QtCore.QObject.connect(self.ui.button9,QtCore.SIGNAL("clicked()"), self.addDigit9)
QtCore.QObject.connect(self.ui.button0,QtCore.SIGNAL("clicked()"), self.addDigit0)


Уже некрасиво выглядит, но дальше еще хуже. 10 раз объявляю функции addDigit[0...9]. Например:
...
Код

def addDigit4(self):
   self.addOverallDigit(4)

...
Код

def addDigit8(self):
   self.addOverallDigit(8)

...
И уже только в функции addOverallDigit я могу полученный символ добавить в итоговую переменную. Весь этот ужас из-за того, что при связи сигналов и слотов, я не могу сделать запись вида:
...
Код

QtCore.QObject.connect(self.ui.button9,QtCore.SIGNAL("clicked()"), self.addOverallDigit(9))
QtCore.QObject.connect(self.ui.button9,QtCore.SIGNAL("clicked()"), self.addOverallDigit(0))

...
И приходится вводить переходные функции.
Есть ли какое-то более изящное решение?
Заранее благодарен!
PM MAIL   Вверх
MaoDzeDunUA
Дата 14.12.2009, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 20.9.2009

Репутация: нет
Всего: нет



Помогли на другом форуме
на будущее если кому понадобится

Код

#создаем QButtonGroup
self.bGroup=QtGui.QButtonGroup(self.MainStackAdminServicesW)

#создаем кнопку
self.Service1ActionB = QtGui.QPushButton(self.MainStackAdminServicesW)
self.Service1ActionB.setGeometry(QtCore.QRect(620, 30, 300, 80))
self.Service1ActionB.setObjectName("Service1ActionB")

#добавляем кнопку в QButtonGroup
self.bGroup.addButton(self.Service1ActionB)

#присваем ей айди 0
self.bGroup.setId(self.Service1ActionB, 0)

#создаем кнопку
self.Service2ActionB = QtGui.QPushButton(self.MainStackAdminServicesW)
self.Service2ActionB.setGeometry(QtCore.QRect(620, 130, 300, 80))
self.Service2ActionB.setObjectName("Service2ActionB")

#добавляем кнопку в QButtonGroup
self.bGroup.addButton(self.Service2ActionB)

#присваем ей айди 1
self.bGroup.setId(self.Service2ActionB,1) 




Далее связываем сигнал
Код

QtCore.QObject.connect(self.ui.bGroup,QtCore.SIGNAL("buttonClicked(int)"), self.func)


А вот сама функция func
Код

def func(self, var):
   print var


При нажатии на кнопку Service1ActionB var будет равна 0, при нажатии на Service2ActionB - единице и т.д.
PM MAIL   Вверх
av0000
Дата 6.4.2010, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 11.2.2009

Репутация: нет
Всего: 2



Методом научного тыка нашел ещё более простое решение:

Код

class Test(QtGui.QWidget, Ui_Template):
  def __init__(self, parent=None):
    # ...
    # Используем ToolButton для вызова диалога выбора файла
    # и заодно упрощенную форму записи connect
    self.ui_toolbutton1.clicked.connect(lambda: self.onGetFolder(1));
    self.ui_toolbutton2.clicked.connect(lambda: self.onGetFolder(2));
    # ...
  def onGetFolder(self, index):
    if index == 1:
      # ....
      pass

PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Разработка GUI | Следующая тема »


 




[ Время генерации скрипта: 0.1265 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.