Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 3, 2014 12:41:08

xenon
От:
Зарегистрирован: 2010-12-03
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача данных в обработчик и дальнейшая работа с результатами выполнения функции

Здравствуйте!
Пытаюсь разобраться с PyQt4 создавая простейший “калькулятор”.
Не совсем понимаю момент с передачей данных в обработчик и дальнейшей работой с результатами выполнения функции.
По шагам:
Нажимаем на button1, функция возвращает 1.
Нажимаем на button2, функция возвращает 2.
Как сделать так, чтобы при нажатии на button3 (=равно) происходило суммирование:1+2 ???

#!/usr/bin/env python
# -*- coding: cp1251 -*-
from PyQt4 import QtCore, QtGui
class MyWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        y=0
        QtGui.QWidget.__init__(self, parent)
        self.setWindowTitle(u"1+2")
        self.resize(300, 100)
        self.button1 = QtGui.QPushButton(u"1")
        self.button2 = QtGui.QPushButton(u"2")
        self.button3 = QtGui.QPushButton(u"=")
        vbox = QtGui.QVBoxLayout()
        vbox.addWidget(self.button1)
        vbox.addWidget(self.button2)
        vbox.addWidget(self.button3)
        self.setLayout(vbox)
        self.connect(self.button1, QtCore.SIGNAL("clicked()"), 
                     lambda : self.on_clicked_button1(1))
        self.connect(self.button2, QtCore.SIGNAL("clicked()"), 
                     lambda : self.on_clicked_button2(2))
        self.connect(self.button3, QtCore.SIGNAL("clicked()"), 
                     lambda : self.on_clicked_button3(self.on_clicked_button1(), self.on_clicked_button2()))
    def on_clicked_button1(self,x=0):
        print(u"Нажата кнопка button1")
        print x, type(x)
        return x
    def on_clicked_button2(self,y=0):
        print(u"Нажата кнопка button2")
        print y, type(y)
        return y
    def on_clicked_button3(self,x=0,y=0):
        print(u"Нажата кнопка button3")
        z=x+y
        print ('x= ', x)
        print ('y=', y)
        print ('z= ',z)
        return z
if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())



Мыши плакали, кололись, но продолжали жрать кактус …

Офлайн

#2 Фев. 3, 2014 12:52:57

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2843
Репутация: +  186  -
Профиль   Отправить e-mail  

Передача данных в обработчик и дальнейшая работа с результатами выполнения функции

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
class MyWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.setWindowTitle(u"1+2")
        self.resize(300, 100)
        self.button1 = QtGui.QPushButton(u"1")
        self.button2 = QtGui.QPushButton(u"2")
        self.button3 = QtGui.QPushButton(u"=")
        vbox = QtGui.QVBoxLayout()
        vbox.addWidget(self.button1)
        vbox.addWidget(self.button2)
        vbox.addWidget(self.button3)
        self.setLayout(vbox)
        self.connect(self.button1, QtCore.SIGNAL("clicked()"), lambda : self.on_clicked_button(1))
        self.connect(self.button2, QtCore.SIGNAL("clicked()"), lambda : self.on_clicked_button(2))
        self.connect(self.button3, QtCore.SIGNAL("clicked()"), self.ravno)
        self.stek = []
        
    def on_clicked_button(self,x=0):
        self.stek.append(x)
        
    def ravno(self):
        z = sum(self.stek)
        print z
        return z
if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    window = MyWindow()
    window.show()
    sys.exit(app.exec_())



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Фев. 3, 2014 13:48:28

xenon
От:
Зарегистрирован: 2010-12-03
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача данных в обработчик и дальнейшая работа с результатами выполнения функции

Rodegast, спасибо за решение!
Как я понимаю, мы создаем список и вносим в него всю последовательность действий с кнопками, а затем просто суммируем все элементы списка.



Мыши плакали, кололись, но продолжали жрать кактус …

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version