1. 程式人生 > >PyQt 的一些小總結 (訊號槽,彈框)

PyQt 的一些小總結 (訊號槽,彈框)

一些基本的資料網上都可以找到,這裡就說一下這幾天遇到的

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 )#彈出警告框