前言✨
PyQt是Python语言的GUI编程解决方案之一,可以运行到多种平台上。可以用来代替Python内置的Tkinter。PyQt的开发者是英国的“Riverbank Computing”公司。它可以免费地用于自由软件的开发。不过目前尚不提供LGPL授权方式(利用Qt官方动态链接库,但不必开放商业代码)。2009年8月,Qt的开发公司诺基亚发布PySide,提供与PyQt类似的功能,但提供了LGPL授权。自4.5版本以后[4],PyQt同时支持Python 2.x与Python 3.x。
这是一个简单的PyQt程序,建立一个PyQt窗口,可以逐渐向里面添加控件实现ui编写。因为是比较重要的基础程序,所以在这里列出来。
参考来自于维基百科
安装PySide2
PySide2支持Qt5框架,兼容Python2.7以上版本以及Python3.5以上版本。
在cmd中使用pip安装PySide2
第一个PyQt程序
QMainWindow无法使用setLayout()方法,因为它有自己的布局
参考来自:Qt文档
1 2 3 4 5 6 7 8
| from PySide2 import QtWidgets import sys app=QtWidgets.QApplication(sys.argv) window=QtWidgets.QMainWindow() window.resize(250,200) window.setWindowTitle("test") window.show() app.exec_()
|
结果:
第一个对话框(布局)程序
但是我一般建立一个qt应用程序,通常是先建立一个窗口类,然后创建控件,控制布局,然后实例化窗口,运行show方法显示窗口。
参考来自:Qt文档
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| from PySide2 import QtWidgets import sys class MyFirstQtWin(QtWidgets.QDialog): def __init__(self): super(MyFirstQtWin,self).__init__() self.resize(250,200) self.setWindowTitle("MyFirstQtWin") self._ui()
def _ui(self): self.createWidgets() self.createLayouts() def createWidgets(self): self.label=QtWidgets.QLabel("label1") self.label2=QtWidgets.QLabel("label2") self.button=QtWidgets.QPushButton("button1") self.button2=QtWidgets.QPushButton("button2")
def createLayouts(self): self.layout_outside=QtWidgets.QHBoxLayout(self) self.HLayout=QtWidgets.QHBoxLayout() self.VLayout=QtWidgets.QVBoxLayout() self.HLayout.addWidget(self.label) self.HLayout.addWidget(self.button) self.VLayout.addWidget(self.label2) self.VLayout.addWidget(self.button2) self.layout_outside.addLayout(self.HLayout) self.layout_outside.addLayout(self.VLayout)
if __name__=="__main__": app=QtWidgets.QApplication(sys.argv) win=MyFirstQtWin() win.show() app.exec_()
|
结果:
内置到maya的PyQt程序
如果是要内置到maya中的窗口,需要通过mayaApi拿到maya窗口的指针,然后再继承它。这里面需要用python扩展maya的c++程序,所以要用到一个包,Shiboken Generator。参考来自:qt文档
1 2 3 4 5 6 7 8 9 10 11 12 13
| from PySide2 import QtWidgets import maya.OpenMayaUI as omui from shiboken2 import wrapInstance def getMayaWindowPtr(): ptr=omui.MQtUtil.mainWindow() mayaWin=wrapInstance(int(ptr),QtWidgets.QMainWindow) return mayaWin
class MayaWinProject(QtWidgets.QDialog): def __init__(self,parent=getMayaWindowPtr()): super(MayaWinProject,self).__init__(parent)
...
|