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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> PyQt, передать с сигналом параметр 
:(
    Опции темы
Hayate
Дата 4.9.2011, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В целях самообучения решил сделать калькулятор.
Код, помимо GUI:
Код
#-*- coding: utf-8 -*-
__author__ = 'Петров Егор'

from PyQt4 import QtCore, QtGui
import sys, calc_ui, string

app = QtGui.QApplication(sys.argv)
window = QtGui.QWidget()
ui = calc_ui.Ui_Dialog()
ui.setupUi(window)
window.show()


class Calculate:
    def __init__(self):
        self.result = 0

class DisplayLCD:
    def __init__(self):
        self.current = '0'
        ui.lcdNumber.display(self.current)
    def set_digit(self, digit):
        self.current = self.current + digit
        ui.lcdNumber.display(int(self.current))

Display = DisplayLCD()

QtCore.QObject.connect(ui.Button_1, QtCore.SIGNAL('clicked()'), Display.set_digit)

sys.exit(app.exec_())

Как сделать, чтобы set_digit(self, digit) получала параметр digit? 
Чтобы было 10 кнопок, 10 сигналов, 10 цифр.
PM MAIL   Вверх
Hayate
Дата 5.9.2011, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот такая загогулина, если в виде кода (Python 3.2):
http://narod.ru/disk/24083182001/calc.zip.html

Вот так вот передавать экмземпляру Display объекта DisplayLCD параметр parametr нельзя, а как можно?
QtCore.QObject.connect(ui.Button_1, QtCore.SIGNAL('clicked()'), Display.set_digit(parametr))
PM MAIL   Вверх
Amp
Дата 6.9.2011, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Используй QSignalMapper.
PM MAIL   Вверх
Filin86
Дата 28.5.2012, 06:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

ui.Button_1, QtCore.SIGNAL('clicked()'), Display.set_digit
 

Сигнал clicked не имеет параметров, а слот требует параметра. 
Код

class DisplayLCD:
    def __init__(self):
        self.current = 0 # должно быть int для отображения, а не строка ('0')
        self.digit = 1
        ui.lcdNumber.display(self.current)
    def set_digit(self):
        self.current = self.current + self.digit
        ui.lcdNumber.display(int(self.current))
Display = DisplayLCD()
QtCore.QObject.connect(ui.Button_1, QtCore.SIGNAL('clicked()'), Display.set_digit) 
#ui.Button_1.clicked.connect(Display.set_digit) - это новым стилем, так как-то проще выглядит

PM MAIL   Вверх
vrny
Дата 5.6.2012, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Лямбдами. Можно в цикле создавать объект кнопки, лепить его в какой-нибудь лайоут и одновременно делать connect примерно такого вида:
QtCore.QObject.connect(ui.Button_1, QtCore.SIGNAL('clicked()'), lambda: Display.set_digit(i) ) 
где i - индекс цикла от 0 до 9

ui в дизайнере сделан? Тогда придётся написать 10 таких строчек smile . Хорошо, что кнопок не 1000 smile 

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


 




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


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

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