Форум сайта python.su
В программе есть несколько классов. Один из них отвечает за логику и реализует все вычисления, а другой является описанием 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)
Офлайн
а что мешает перенести создание связи в главную функцию? Как-то так:
window = MainWindow()
o = Logic()
func = o.method1
window.connect(window.OutButton, QtCore.SIGNAL('clicked()'), func)
window.show()
Отредактировано (Ноя. 19, 2009 07:15:51)
Офлайн
Привет.
Первый способ(посложнее):
# -*- 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_())
Офлайн
Пасиба ребята. Вы-лучшие
Офлайн
лучше вторым, и написать вот так:
window.outButton.clicked.connect(o.method1)
Офлайн
EnchantnerЯ хочу сохранить классы максимально независимыми друг от друга.
Есть и противоположный вариант - объявлять объект класса логики в описании самой формы.
Enchantnerто как мне вызывать действие? Мне необходимо разбить на нечто вроде:
скобки после метода не нужны в данном случае при создании связи - это связывание функций.
Отредактировано (Ноя. 20, 2009 20:50:24)
Офлайн