Найти - Пользователи
Полная версия: (?) PyQt4. Выполнение функций чужого класса при обработке нажатий
Начало » GUI » (?) PyQt4. Выполнение функций чужого класса при обработке нажатий
1
janitor
В программе есть несколько классов. Один из них отвечает за логику и реализует все вычисления, а другой является описанием 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_())
Enchantner
а что мешает перенести создание связи в главную функцию? Как-то так:
window = MainWindow()
o = Logic()
func = o.method1
window.connect(window.OutButton, QtCore.SIGNAL('clicked()'), func)
window.show()
Есть и противоположный вариант - объявлять объект класса логики в описании самой формы.
PS: и да, скобки после метода не нужны в данном случае при создании связи - это связывание функций.
gmorgunov
Привет.
Первый способ(посложнее):
# -*- 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_())
janitor
Пасиба ребята. Вы-лучшие
pasaranax
лучше вторым, и написать вот так:
window.outButton.clicked.connect(o.method1)
janitor
Enchantner
Есть и противоположный вариант - объявлять объект класса логики в описании самой формы.
Я хочу сохранить классы максимально независимыми друг от друга.


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

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


У меня в программе кнопки отвечают за движение: щелкнули вправо - объект поехал. Какие связи надо вешать на функции, чтобы их выполнять? оО
программа http://dump.ru/file/3801103
я хочу на кнопки повесить действия подобно тому, как сейчас они весят на мышке
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB