PyQt 的一些小总结 (信号槽,弹框)

时间:2020-12-10 23:00:33

一些基本的资料网上都可以找到,这里就说一下这几天遇到的

1,PYQt4 中信号槽机制:

本想点击一个按钮然后实现去另一个函数,最初这样写的:

self.connect(button, QtCore.SIGNAL('clicked()'), QtGui.qApp,
QtCore.SLOT('self.func()'))## self.func 为自己写的一个函数
结果跟预想的不一样=== 还没有点击按钮,func就执行了;经过查资料之后,发现自己的写法本身就有问题,就是self.func()这里不应该有‘()’ ,于是去掉还不可以。后来发现,不应该有前面的Qt.Core.SLOT.....下面说一下可行的两种机制:

(1)旧时的信号槽机制:

QtCore.QObject.connect(button, QtCore.SIGNAL('clicked()'), self.onClicked)
例如:

# -*- coding: cp936 -*-
from PyQt4 import QtGui, QtCore
app = QtGui.QApplication([])
w = QtGui.QWidget()
def showMsg():
print 'ssss'

btn = QtGui.QPushButton(u"点我", w)
w.connect(btn, QtCore.SIGNAL("clicked()"), showMsg)

w.show()
app.exec_()

这样点击了‘点我’ 才会打印出来‘ssss’

(2)新式机制:

button.clicked.connect(self.onClicked)
例如同样的例子:

# -*- coding: cp936 -*-
from PyQt4 import QtGui, QtCore
app = QtGui.QApplication([])
w = QtGui.QWidget()
def showMsg():
print 'ssss'
btn = QtGui.QPushButton(u"点我", w)
#w.connect(btn, QtCore.SIGNAL("clicked()"), showMsg)
btn.clicked.connect(showMsg)

w.show()
app.exec_()
效果一样;

不过问过大神之后,以后尽量用新式的机制,比较符合 pyhton的标准,而且直观容易理解;


2,Pyqt几种常用的弹窗(额。。暂且这么叫吧)

fileName = QtGui.QFileDialog.getOpenFileName( self, 'Open' )## 弹出对话框,选择文件                                                           
 selectDirName=QtGui.QFileDialog.getExistingDirectory(None,"Select a directory","")## 弹出对话框,选择文件夹
def OnInfoButton( self ):        QtGui.QMessageBox.information( self, "Pyqt", "information" )##弹出信息框             def OnQuestionButton( self ):        r = QtGui.QMessageBox.question( self, "PyQt", "Question", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No, QtGui.QMessageBox.Cancel )## 弹出询问框             def OnWarningButton( self ):        r = QtGui.QMessageBox.warning( self, "PyQT", "warning", QtGui.QMessageBox.Yes, QtGui.QMessageBox.No )#弹出警告框