PyQt4学习笔记2:事件和信号
事件是任何 GUI 程序中很重要的部分。所有 GUI 应用都是事件驱动的。一个应用对其生命期产生的不同的事件类型做出反应。事件是主要由应用的用户产生。但是,也可以通过其他方法产生,比如,网络通信,窗口的管理者,计时器。
PyQt 4.5 引入了新的 API 用于信号和槽。
这是旧式的 API 。
QtCore.QObject.connect(self.ui.button_open,QtCore.SIGNAL("clicked()"), self.file_dialog)
新式的更接近 Python 的标准
button.clicked.connect(self.onClicked)
self.ui对应窗口,通过它我们可以访问窗口中的部件。因此,self.ui.button_open对应“打开”按钮。self.file_dialog是信号对应的函数,它是比较重要的部分。
test.py测试代码:
import sys from PyQt4 import QtCore, QtGui from ui_test import Ui_notepad class MyForm(QtGui.QMainWindow): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) self.ui = Ui_notepad() self.ui.setupUi(self) # here we connect signals with our slots QtCore.QObject.connect(self.ui.button_open,QtCore.SIGNAL("clicked()"), self.file_dialog) def file_dialog(self): #self.ui.editor_window.setText('aaaaaaaaaa') fd = QtGui.QFileDialog(self) self.filename = fd.getOpenFileName() from os.path import isfile if isfile(self.filename): text = open(self.filename).read() self.ui.editor_window.setText(text) if __name__ == "__main__": app = QtGui.QApplication(sys.argv) myapp = MyForm() myapp.show() sys.exit(app.exec_())
ui_test.py UI生成代码:
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'test.ui' # # Created: Sat Jan 11 22:11:39 2014 # by: PyQt4 UI code generator 4.10.3 # # WARNING! All changes made in this file will be lost! from PyQt4 import QtCore, QtGui try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: def _fromUtf8(s): return s try: _encoding = QtGui.QApplication.UnicodeUTF8 def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig, _encoding) except AttributeError: def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig) class Ui_notepad(object): def setupUi(self, notepad): notepad.setObjectName(_fromUtf8("notepad")) notepad.resize(692, 462) self.button_open = QtGui.QPushButton(notepad) self.button_open.setGeometry(QtCore.QRect(60, 10, 75, 23)) self.button_open.setObjectName(_fromUtf8("button_open")) self.button_close = QtGui.QPushButton(notepad) self.button_close.setGeometry(QtCore.QRect(290, 10, 75, 23)) self.button_close.setObjectName(_fromUtf8("button_close")) self.editor_window = QtGui.QTextEdit(notepad) self.editor_window.setGeometry(QtCore.QRect(20, 50, 651, 381)) self.editor_window.setObjectName(_fromUtf8("editor_window")) self.button_save = QtGui.QPushButton(notepad) self.button_save.setGeometry(QtCore.QRect(180, 10, 75, 23)) self.button_save.setObjectName(_fromUtf8("button_save")) self.retranslateUi(notepad) QtCore.QObject.connect(self.button_close, QtCore.SIGNAL(_fromUtf8("clicked()")), notepad.close) QtCore.QMetaObject.connectSlotsByName(notepad) def retranslateUi(self, notepad): notepad.setWindowTitle(_translate("notepad", "Form", None)) self.button_open.setText(_translate("notepad", "打开", None)) self.button_close.setText(_translate("notepad", "关闭", None)) self.button_save.setText(_translate("notepad", "保存", None))