Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 15, 2010 03:48:38

billy_bob
От:
Зарегистрирован: 2010-11-01
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt слоты

Ребят, подскажите.
есть гуй, сконструированный в Qt Designer-e. В нем создал несколько Qaction-ов. Создал главный файл.

import sys
from PyQt4 import QtGui, QtCore
from MainForm import Ui_MainWindow

class Main(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.ui=Ui_MainWindow()
self.ui.setupUi(self)
self.statusBar().showMessage("Ready")
self.connect(self.ui.actionExit, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()'))
self.connect(self.ui.actionDBOpen, QtCore.SIGNAL('triggered()'), QtCore.SLOT('self.openDB()'))

def openDB(self):
self.statusBar().showMessage("DB open")

def main():
app = QtGui.QApplication(sys.argv)
window=Main()
window.show()
sys.exit(app.exec_())

if __name__ == '__main__':
main()
self.connect(self.ui.actionExit, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()')) отрабатывает нормально, а вот
self.connect(self.ui.actionDBOpen, QtCore.SIGNAL('triggered()'), QtCore.SLOT('self.openDB()')) ругается
Object::connect: No such slot Main::self.openDB()
Object::connect: (sender name: 'actionDBOpen')
Object::connect: (receiver name: 'MainWindow')
Я так понял я не в тот класс функцию загнал? Если так, то куда надо?



Офлайн

#2 Ноя. 15, 2010 04:03:29

billy_bob
От:
Зарегистрирован: 2010-11-01
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt слоты

эм. ничего не понял. переписал на новый стиль - все заработало.

self.ui.actionDBOpen.triggered.connect(self.openDB)
Почему так?



Офлайн

#3 Ноя. 15, 2010 04:44:48

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

PyQt слоты

метод .openDB ни разу не слот. Или декларируйте слот и работайте с ним или просто
self.connect(self.ui.actionDBOpen, QtCore.SIGNAL('triggered()'), self.openDB)



Офлайн

#4 Ноя. 15, 2010 12:55:51

billy_bob
От:
Зарегистрирован: 2010-11-01
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt слоты

Андрей Светлов
метод .openDB ни разу не слот. Или декларируйте слот и работайте с ним или просто
self.connect(self.ui.actionDBOpen, QtCore.SIGNAL('triggered()'), self.openDB)
хм. вот если я его объявляю предложенным вами способом, то он исполняется сразу при запуске программы и никогда больше. уже пробовал так.



Офлайн

#5 Ноя. 15, 2010 12:59:01

billy_bob
От:
Зарегистрирован: 2010-11-01
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt слоты

ой. извините пожалуйста. точно, заработал. а почему его передают без скобок?



Офлайн

#6 Ноя. 15, 2010 13:06:35

billy_bob
От:
Зарегистрирован: 2010-11-01
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt слоты

.



Отредактировано (Ноя. 15, 2010 13:09:35)

Офлайн

#7 Ноя. 15, 2010 13:19:15

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

PyQt слоты

Передают ссылку на python callable, а не имя слота



Отредактировано (Ноя. 15, 2010 13:20:14)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version