PyQt
2015-05-31 22:57
204 查看
PyQt
sf2gis@163.com
2015年4月24日
下载SIP:官网。
配置:使用命令行cd到sip的目录下,
python configure.py --show-platform将显示所有支持的环境。
python configure.py --platform win32-msvc2010使用选定环境编译
编译:使用vc2010的命令提示符cd到sip的目录下,
nmake:make
nmake makefile install:编译 安装。
测试:sip -h 能够正常执行说明安装成功。
参考:http://blog.csdn.net/sunny2038/article/details/7237630
安装完成后可以直接使用。
from PyQt4 importQtGui,QtCore
需要创建QApplication作为Gui的应用对象,并调用exec_()启动消息循环。
示例:
if"__main__"==__name__:
app = QtGui.QApplication(sys.argv)
。。。
sys.exit(app.exec_())
常用控件参考:http://www.qaulau.com/books/PyQt4_Tutorial/widgets.html
示例:参见:创建一个Widget类,具有添加退出按钮,显示对话框和居中显示的功能。
示例:
from PyQt4 import QtGui
from PyQt4.QtGui importQStatusBar
classMainWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setWindowTitle("MainWindowXX_XX")
self.statusBar().showMessage("status_XXX")
菜单:menuBar()获取当前主菜单。addMenu()添加菜单项。
工具栏: addToolBar()。
状态栏:statusBar()。
示例:参见创建主窗体,带有工具条,菜单和状态栏。
示例:
def openFile(self):
dlg =QtGui.QFileDialog.getOpenFileName(self,"OpenFile","","Text(*.txt)")
print(dlg.toLocal8Bit())
示例:
btnQuit = QtGui.QPushButton("Quit")
# self.connect(btnQuit,QtCore.SIGNAL("clicked()"),QtCore.SLOT("close()"))
btnQuit.clicked.connect(self.close)
自定义信号:
使用QtCore.pyqtSignal()声明或者直接使用QtCore.emit(“信号()”)。
参考:http://www.cnblogs.com/codeio/archive/2011/08/30/2159030.html
示例:
sigXXX = QtCore.pyqtSignal()//define
def mousePressEvent(self,event):
#self.emit(QtCore.SIGNAL("sigXXX()"))//define and emit
self.sigXXX.emit()//emit
自定义槽
使用@QtCore.pyqtSlot()修饰器或者使用connect方式直斥调用函数。
参考:http://www.linuxzen.com/pyqt4-xin-hao-he-cao-xiang-jie.html
示例:
class MainWindow(QtGui.QMainWindow):
sigXXX = QtCore.pyqtSignal()
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setWindowTitle("MainWindowXX_XX")
self.statusBar().showMessage("status_XXX")
self.createActions()
# self.connect(self,QtCore.SIGNAL("sigXXX()"),self,QtCore.SLOT("handleXXX()"))#right, connect to slot
#self.connect(self,QtCore.SIGNAL("sigXXX()"),self,QtCore.SLOT("handleYYY()"))#wrong,can not connect to fun
# self.sigXXX.connect(self.handleXXX)#right, connect to slot
self.sigXXX.connect(self.handleYYY)#wright,connect to fun
@QtCore.pyqtSlot()
def handleXXX(self):
self.setWindowTitle("XXX-1")
def handleYYY(self):
self.setWindowTitle("YYY-2")
def addLayoutWidget(self):
btnQuit = QtGui.QPushButton("Quit")
self.connect(btnQuit,QtCore.SIGNAL("clicked()"),QtCore.SLOT("close()"))
lbl1 = QtGui.QLabel("Label1")
hBox = QtGui.QHBoxLayout()
hBox.addWidget(lbl1)
hBox.addWidget(btnQuit)
vBox = QtGui.QVBoxLayout()
vBox.addStretch(1)
vBox.addStretch()
vBox.addLayout(hBox)
vBox.addWidget(QtGui.QLabel("Label2"))
vBox.addWidget(QtGui.QLabel("Label3"))
self.setCentralWidget(QtGui.QWidget(self))
self.centralWidget().setLayout(vBox)
2) 使用pyuic4生成ui.py
pyuic4 -o ui.py test.ui
3) 将py导入应用
from PyQt4 import QtGui
import ui
classDlg(QtGui.QDialog,ui.Ui_Dialog):
def __init__(self):
super(Dlg,self).__init__()
self.setupUi(self)
4) 在应用中构造ui的对应类
使用ui中的ui_类作为基类生成对应类。
示例:
from PyQt4 import QtGui
import ui
classDlg(QtGui.QDialog,ui.Ui_Dialog):
def __init__(self):
super(Dlg,self).__init__()
self.setupUi(self)
from PyQt4 importQtGui,QtCore
class Widget(QtGui.QWidget):
def __init__(self,parent=None):
QtGui.QWidget.__init__(self,parent)
self.setGeometry(200,100,200,500)
self.setWindowTitle("XXX_YYYY")
self.setWindowIcon(QtGui.QIcon("xx.png"))
self.setToolTip("ToolTipHahahaha")
def addWidget(self):
btn =QtGui.QPushButton("Quit",self)
self.connect(btn,QtCore.SIGNAL("clicked()"),QtGui.qApp,QtCore.SLOT("quit()"))
def showMessage(self):
reply =QtGui.QMessageBox.question(self,"title","question",QtGui.QMessageBox.Yes|QtGui.QMessageBox.No,QtGui.QMessageBox.Yes)
if reply == QtGui.QMessageBox.Yes:
print("accept")
def move2Center(self):
screenRect =QtGui.QDesktopWidget().screenGeometry()
self.move(screenRect.width()/2,screenRect.height()/2)
from PyQt4.QtGui importQStatusBar
classMainWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setWindowTitle("MainWindowXX_XX")
self.statusBar().showMessage("status_XXX")
self.createActions()
def createActions(self):
self.actClose =QtGui.QAction("ActionXY",self)
self.actClose.setToolTip("Tip_xxx")
self.actClose.setStatusTip("statusTipYYYY")
self.actClose.setShortcut("Ctrl+I")
self.connect(self.actClose,QtCore.SIGNAL("triggered()"),QtCore.SLOT("close()"))
def addMenu(self):
menu= self.menuBar()
file =menu.addMenu("&File");
file.addAction(self.actClose)
def addTool(self):
toolBar = self.addToolBar("Quit")
toolBar.addAction(self.actClose)
if"__main__"==__name__:
app = QtGui.QApplication(sys.argv)
win = MainWindow.MainWindow()
win.addMenu()
win.addTool()
win.show()
sys.exit(app.exec_())
sf2gis@163.com
2015年4月24日
1 目标:Python和Qt配合使用
2 原理:将Qt的库转化为Python库.
PyQt使用SIP将所有Qt的库转换为对应的Python文件。可以在程序中由Python直接调用。3 方法:SIP
SIP将C/C++的库转换为Python文件,由其它Python直接调用。专为Pyqt开发,其它场合使用较少。3.1 SIP:用于C/C++的Python转化库。
目标:将C/C++的库转化为Python的库。3.1.1安装方法
环境:Win7+VS2010下载SIP:官网。
配置:使用命令行cd到sip的目录下,
python configure.py --show-platform将显示所有支持的环境。
python configure.py --platform win32-msvc2010使用选定环境编译
编译:使用vc2010的命令提示符cd到sip的目录下,
nmake:make
nmake makefile install:编译 安装。
测试:sip -h 能够正常执行说明安装成功。
参考:http://blog.csdn.net/sunny2038/article/details/7237630
4 方法:PyQt
4.1 目标:将Qt转换为Python
4.2 原理:将所有Qt库的类一一映射为Python的类。使用方法与Qt完全一致。
4.3 方法:
参考: http://www.qaulau.com/books/PyQt4_Tutorial/introduction.html4.3.1安装:需先安装SIP(参见方法:SIP)
下载PyQt并安装。安装完成后可以直接使用。
4.3.2文档、API参考
安装完成后,在开始菜单中可以看到其类参考及其它相关文档。4.3.3使用方法:与Qt一致
使用前将Qt的对应库导入工程中。from PyQt4 importQtGui,QtCore
4.3.4应用程序:QApplication
在此模块中,将搭建程序的入口状态和模块调用。需要创建QApplication作为Gui的应用对象,并调用exec_()启动消息循环。
示例:
if"__main__"==__name__:
app = QtGui.QApplication(sys.argv)
。。。
sys.exit(app.exec_())
4.3.5QtGui对象:QMainWindow、QWidget
4.3.5.1 组件:QWidget。
在QtGui模块中。常用控件参考:http://www.qaulau.com/books/PyQt4_Tutorial/widgets.html
示例:参见:创建一个Widget类,具有添加退出按钮,显示对话框和居中显示的功能。
4.3.5.2 主窗口:QMainWindow
在QtGui模块中。包含菜单、工具栏、状态栏等。示例:
from PyQt4 import QtGui
from PyQt4.QtGui importQStatusBar
classMainWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setWindowTitle("MainWindowXX_XX")
self.statusBar().showMessage("status_XXX")
菜单:menuBar()获取当前主菜单。addMenu()添加菜单项。
工具栏: addToolBar()。
状态栏:statusBar()。
示例:参见创建主窗体,带有工具条,菜单和状态栏。
4.3.5.3 对话框:QDialog
与Qt一致。示例:
def openFile(self):
dlg =QtGui.QFileDialog.getOpenFileName(self,"OpenFile","","Text(*.txt)")
print(dlg.toLocal8Bit())
4.3.6Qt信号-槽:QtCore.SIGNAL(“名称()”)
默认的信号-槽与Qt一致。示例:
btnQuit = QtGui.QPushButton("Quit")
# self.connect(btnQuit,QtCore.SIGNAL("clicked()"),QtCore.SLOT("close()"))
btnQuit.clicked.connect(self.close)
自定义信号:
使用QtCore.pyqtSignal()声明或者直接使用QtCore.emit(“信号()”)。
参考:http://www.cnblogs.com/codeio/archive/2011/08/30/2159030.html
示例:
sigXXX = QtCore.pyqtSignal()//define
def mousePressEvent(self,event):
#self.emit(QtCore.SIGNAL("sigXXX()"))//define and emit
self.sigXXX.emit()//emit
自定义槽
使用@QtCore.pyqtSlot()修饰器或者使用connect方式直斥调用函数。
参考:http://www.linuxzen.com/pyqt4-xin-hao-he-cao-xiang-jie.html
示例:
class MainWindow(QtGui.QMainWindow):
sigXXX = QtCore.pyqtSignal()
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setWindowTitle("MainWindowXX_XX")
self.statusBar().showMessage("status_XXX")
self.createActions()
# self.connect(self,QtCore.SIGNAL("sigXXX()"),self,QtCore.SLOT("handleXXX()"))#right, connect to slot
#self.connect(self,QtCore.SIGNAL("sigXXX()"),self,QtCore.SLOT("handleYYY()"))#wrong,can not connect to fun
# self.sigXXX.connect(self.handleXXX)#right, connect to slot
self.sigXXX.connect(self.handleYYY)#wright,connect to fun
@QtCore.pyqtSlot()
def handleXXX(self):
self.setWindowTitle("XXX-1")
def handleYYY(self):
self.setWindowTitle("YYY-2")
4.3.7Qt布局
注意,在QMainWindow中设置布局时,应该先设置centralWidget(),再设置中央控件的layout。def addLayoutWidget(self):
btnQuit = QtGui.QPushButton("Quit")
self.connect(btnQuit,QtCore.SIGNAL("clicked()"),QtCore.SLOT("close()"))
lbl1 = QtGui.QLabel("Label1")
hBox = QtGui.QHBoxLayout()
hBox.addWidget(lbl1)
hBox.addWidget(btnQuit)
vBox = QtGui.QVBoxLayout()
vBox.addStretch(1)
vBox.addStretch()
vBox.addLayout(hBox)
vBox.addWidget(QtGui.QLabel("Label2"))
vBox.addWidget(QtGui.QLabel("Label3"))
self.setCentralWidget(QtGui.QWidget(self))
self.centralWidget().setLayout(vBox)
4.3.8使用QtDesigner生成的ui作为GUI
1) 在QtDesigner中生成UI文件。2) 使用pyuic4生成ui.py
pyuic4 -o ui.py test.ui
3) 将py导入应用
from PyQt4 import QtGui
import ui
classDlg(QtGui.QDialog,ui.Ui_Dialog):
def __init__(self):
super(Dlg,self).__init__()
self.setupUi(self)
4) 在应用中构造ui的对应类
使用ui中的ui_类作为基类生成对应类。
示例:
from PyQt4 import QtGui
import ui
classDlg(QtGui.QDialog,ui.Ui_Dialog):
def __init__(self):
super(Dlg,self).__init__()
self.setupUi(self)
4.4 示例
4.4.1创建一个Widget类,具有添加退出按钮,显示对话框和居中显示的功能。
import sysfrom PyQt4 importQtGui,QtCore
class Widget(QtGui.QWidget):
def __init__(self,parent=None):
QtGui.QWidget.__init__(self,parent)
self.setGeometry(200,100,200,500)
self.setWindowTitle("XXX_YYYY")
self.setWindowIcon(QtGui.QIcon("xx.png"))
self.setToolTip("ToolTipHahahaha")
def addWidget(self):
btn =QtGui.QPushButton("Quit",self)
self.connect(btn,QtCore.SIGNAL("clicked()"),QtGui.qApp,QtCore.SLOT("quit()"))
def showMessage(self):
reply =QtGui.QMessageBox.question(self,"title","question",QtGui.QMessageBox.Yes|QtGui.QMessageBox.No,QtGui.QMessageBox.Yes)
if reply == QtGui.QMessageBox.Yes:
print("accept")
def move2Center(self):
screenRect =QtGui.QDesktopWidget().screenGeometry()
self.move(screenRect.width()/2,screenRect.height()/2)
4.4.2 创建主窗体,带有工具条,菜单和状态栏。
from PyQt4 import QtGui,QtCorefrom PyQt4.QtGui importQStatusBar
classMainWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setWindowTitle("MainWindowXX_XX")
self.statusBar().showMessage("status_XXX")
self.createActions()
def createActions(self):
self.actClose =QtGui.QAction("ActionXY",self)
self.actClose.setToolTip("Tip_xxx")
self.actClose.setStatusTip("statusTipYYYY")
self.actClose.setShortcut("Ctrl+I")
self.connect(self.actClose,QtCore.SIGNAL("triggered()"),QtCore.SLOT("close()"))
def addMenu(self):
menu= self.menuBar()
file =menu.addMenu("&File");
file.addAction(self.actClose)
def addTool(self):
toolBar = self.addToolBar("Quit")
toolBar.addAction(self.actClose)
if"__main__"==__name__:
app = QtGui.QApplication(sys.argv)
win = MainWindow.MainWindow()
win.addMenu()
win.addTool()
win.show()
sys.exit(app.exec_())
相关文章推荐
- Qt线程
- 通过线程控制QT控制台程序退出
- QT编译时 qmake错误
- 读Pyqt4教程,带你入门Pyqt4 _006
- 基于qt的嵌入式平台输入法:SYSZUXpinyin移植到arm后,UDP接收端中文乱码 本地中文乱码 解决
- QT多线程—主界面卡死解决方案
- QT中进度对话框(QProgressDialog)
- PyQt5资料
- Qt小游戏开发:贪吃蛇
- 在Qt Creator中配置Opencv的详细步骤
- VS2013配置qt开发环境及安装包(qt5.3.2)
- QT配置opencv开发环境
- 编译生成ARM上可运行的Qt程序
- QT 的信号与槽机制介绍
- qt5中文乱码
- win7 64位 QT安装 MySql数据库驱动安装遇到的问题
- QTP数据库操作(ADO)(转载)
- 使用QTP 11批量修改QC10测试…
- 使用QC10远程启用QTP11(也可在本…
- QTP跑单独的脚本(虚拟对象)