PyQt 的一些小總結 (訊號槽,彈框)
阿新 • • 發佈:2019-01-02
一些基本的資料網上都可以找到,這裡就說一下這幾天遇到的
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)
例如:
這樣點選了‘點我’ 才會打印出來‘ssss’# -*- 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_()
(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 )#彈出警告框