2013-09-24 3 views
1

У меня есть кнопки в графическом интерфейсе PyQt, который сигнализирует метод внешнего класса с помощью functools.partial:PyQt clicked.connect сигнализации более чем одно событие

self.Valve_ON.clicked.connect(functools.partial(self.ValveControl.IO_on,6008)) 

Я хотел бы также, чтобы иметь возможность отображать сообщение statusBar

self.statusBar().showMessage("Valve on") 

Как я могу сигнализировать более одного события при щелчке.

Благодаря

ответ

1

Создать слот для сигнала и запустить свой код оттуда, что-то вроде этого:

#!/usr/bin/env python 
#-*- coding:utf-8 -*- 

#--------- 
# IMPORT 
#--------- 
import sys 

from PyQt4 import QtGui, QtCore 

#--------- 
# DEFINE 
#--------- 
class MyWindow(QtGui.QMainWindow): 
    _numberClicked = 0 

    def __init__(self, parent=None): 
     super(MyWindow, self).__init__(parent) 

     self.centralwidget = QtGui.QWidget(self) 

     self.pushButtonClick = QtGui.QPushButton(self.centralwidget) 
     self.pushButtonClick.setText("Click Me!") 
     self.pushButtonClick.clicked.connect(self.on_pushButtonClick_clicked) 

     self.labelClicked = QtGui.QLabel(self) 

     self.layoutVertical = QtGui.QVBoxLayout(self.centralwidget) 
     self.layoutVertical.addWidget(self.pushButtonClick) 
     self.layoutVertical.addWidget(self.labelClicked) 

     self.statusbar = QtGui.QStatusBar(self) 
     self.statusbar.setObjectName("statusbar") 

     self.setCentralWidget(self.centralwidget) 
     self.setStatusBar(self.statusbar) 

    @QtCore.pyqtSlot() 
    def on_pushButtonClick_clicked(self): 
     self._numberClicked += 1 

     message = "Clicked {0} time(s)".format(self._numberClicked) 

     self.labelClicked.setText(message) 
     self.statusbar.showMessage(message, 1111) 

#--------- 
# MAIN 
#--------- 
if __name__ == "__main__":  
    app = QtGui.QApplication(sys.argv) 
    app.setApplicationName('MyWindow') 

    main = MyWindow() 
    main.resize(333, 111) 
    main.show() 

    sys.exit(app.exec_()) 
0

Вы можете подключить столько слотов сигнала, как вы хотите:

self.Valve_ON.clicked.connect(functools.partial(self.ValveControl.IO_on,6008)) 
self.Valve_ON.clicked.connect(functools.partial(self.statusBar().showMessage,"Valve on")) 

Оба должны стрелять, когда вы нажимаете кнопку.

A signal может быть соединен с любым числом slot с и slot может иметь произвольное число signal с подключенными к нему. Библиотека будет сортировать всю отправку для вас.

Смежные вопросы