前言✨
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文档 
| 12
 3
 4
 5
 6
 7
 8
 
 | from PySide2 import QtWidgetsimport sys
 app=QtWidgets.QApplication(sys.argv)
 window=QtWidgets.QMainWindow()
 window.resize(250,200)
 window.setWindowTitle("test")
 window.show()
 app.exec_()
 
 | 
结果:

第一个对话框(布局)程序
但是我一般建立一个qt应用程序,通常是先建立一个窗口类,然后创建控件,控制布局,然后实例化窗口,运行show方法显示窗口。
参考来自:Qt文档 
| 12
 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 QtWidgetsimport 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文档 
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 
 | from PySide2 import QtWidgetsimport 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)
 
 ...
 
 |