Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » (?) PyQt4. Выполнение функций чужого класса при обработке нажатий [RSS Feed]

#1 Ноя. 19, 2009 04:09:53

janitor
От:
Зарегистрирован: 2009-11-03
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

(?) PyQt4. Выполнение функций чужого класса при обработке нажатий

В программе есть несколько классов. Один из них отвечает за логику и реализует все вычисления, а другой является описанием GUI. Необходимо по нажатию клавиши выполнять метод класса, ответственного за логику.

Вопрос: куда надо поставить коннект, чтобы он правильно обрабатывался?
(в коде закомменчены две безуспешные попытки)

# -*- coding: utf-8 -*- 
import sys
from PyQt4 import QtCore, QtGui

class MainWindow(QtGui.QMainWindow):
def __init__(self, parent = None):
QtGui.QMainWindow.__init__(self, parent)

OutButton = QtGui.QPushButton('-', self)
# self.connect(OutButton, QtCore.SIGNAL('clicked()'),<!--выполнение метода method1 класса Logic--!> )

class Logic():
a=2
def method1(self):
a+=a

if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
window = MainWindow()
window.show()

o=Logic()

# window.OutButton.connect(window.OutButton, o.method1())
sys.exit(app.exec_())



Отредактировано (Ноя. 19, 2009 04:10:35)

Офлайн

#2 Ноя. 19, 2009 07:13:43

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

(?) PyQt4. Выполнение функций чужого класса при обработке нажатий

а что мешает перенести создание связи в главную функцию? Как-то так:

window = MainWindow()
o = Logic()
func = o.method1
window.connect(window.OutButton, QtCore.SIGNAL('clicked()'), func)
window.show()
Есть и противоположный вариант - объявлять объект класса логики в описании самой формы.
PS: и да, скобки после метода не нужны в данном случае при создании связи - это связывание функций.



Отредактировано (Ноя. 19, 2009 07:15:51)

Офлайн

#3 Ноя. 19, 2009 14:07:12

gmorgunov
От:
Зарегистрирован: 2008-10-15
Сообщения: 137
Репутация: +  0  -
Профиль   Отправить e-mail  

(?) PyQt4. Выполнение функций чужого класса при обработке нажатий

Привет.
Первый способ(посложнее):

# -*- coding: utf-8 -*-
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *

class MainWindow(QMainWindow):
def __init__(self, parent = None):
QMainWindow.__init__(self, parent)
outButton = QPushButton('outButton', self)
self.o=Logic() # self.o - атрибут MainWidow
self.connect(outButton, SIGNAL('clicked()'), self.o.method1 ) # соединяемся с self.o.method1

class Logic():
a=2 # a - атрибут класса Logic
def method1(self):
self.a += self.a # поэтому обращение self.a
print self.a

if __name__ == "__main__":
app = QApplication(sys.argv)
window=MainWindow()
window.show()
sys.exit(app.exec_())
Второй способ(попроще);
# -*- coding: utf-8 -*-
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *

class Logic():
a=2
def method1(self):
self.a += self.a
print self.a

if __name__ == "__main__":
app = QApplication(sys.argv)
button=QPushButton('pushButton')
o=Logic()
QObject.connect(button, SIGNAL('clicked()'),o.method1 )
button.show()
sys.exit(app.exec_())



Офлайн

#4 Ноя. 19, 2009 14:30:05

janitor
От:
Зарегистрирован: 2009-11-03
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

(?) PyQt4. Выполнение функций чужого класса при обработке нажатий

Пасиба ребята. Вы-лучшие



Офлайн

#5 Ноя. 19, 2009 14:42:38

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

(?) PyQt4. Выполнение функций чужого класса при обработке нажатий

лучше вторым, и написать вот так:
window.outButton.clicked.connect(o.method1)



Офлайн

#6 Ноя. 20, 2009 20:46:07

janitor
От:
Зарегистрирован: 2009-11-03
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

(?) PyQt4. Выполнение функций чужого класса при обработке нажатий

Enchantner
Есть и противоположный вариант - объявлять объект класса логики в описании самой формы.
Я хочу сохранить классы максимально независимыми друг от друга.


Что-то я запутался. В моем представлении этого мира все, что кнопке надо - это описание и действие.
Если
Enchantner
скобки после метода не нужны в данном случае при создании связи - это связывание функций.
то как мне вызывать действие? Мне необходимо разбить на нечто вроде:
a=window.outButton.clicked.connect(o.method)
a(param)
???

В чем смысл этого связывания, если не в обработке действия?


У меня в программе кнопки отвечают за движение: щелкнули вправо - объект поехал. Какие связи надо вешать на функции, чтобы их выполнять? оО
программа http://dump.ru/file/3801103
я хочу на кнопки повесить действия подобно тому, как сейчас они весят на мышке



Отредактировано (Ноя. 20, 2009 20:50:24)

Офлайн

  • Начало
  • » GUI
  • » (?) PyQt4. Выполнение функций чужого класса при обработке нажатий[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version