python qt教程_Python - Python Qt 开发教程(1)
前言寫文章之前我都喜歡加個前言,說說自己的感受,這次也不例外。
這篇文章是學(xué)習(xí) Python Qt 半年來出的教程,因此教程的質(zhì)量并不能保證,只是將自己的經(jīng)驗分享給大家。
Python Qt 圖形界面開發(fā)需要有一定的編程基礎(chǔ),觀看本教程之前要有Python的使用基礎(chǔ)。
因為我本人是 流程TD ,開發(fā)環(huán)境主要在 Maya 上,因此這套教程主要針對于 Maya 的 開發(fā)環(huán)境,不過Qt是通用于各個軟件平臺的,有問題可以相互交流。
什么是Qt
Qt具體是什么,可以自行網(wǎng)上百度.
簡單地說就是一個跨平臺的圖形化框架,通過這個框架可以實(shí)現(xiàn)跨平臺的軟件界面。
跨平臺主要指可以在多個平臺上運(yùn)行,最通俗的說法是兼容 Linux、Mac、Windows 這三個最常用的系統(tǒng)。
Qt曾經(jīng)由諾基亞公司維護(hù),目前由Digia公司維護(hù),在桌面軟件開發(fā)上有不可撼動的地位。
為什么使用Qt由于Qt可以減少跨平臺維護(hù)的問題。
如今很多軟件都是利用Qt搭建圖形化界面,包括但不限于Houdini、Maya、Nuke等等
作為插件開發(fā)者,掌握Qt的圖形化開發(fā)可以極大加快開發(fā)效率。
Qt開發(fā)使用的語言Qt這個框架是使用 C++ 代碼實(shí)現(xiàn)的,在現(xiàn)成的軟件中嵌入 C++ 代碼是非常不便的。
而python作為膠水語言、腳本語言,補(bǔ)足了這方面的短板。
python之所以這么好,原因是底層也是基于 c 語言。
python Qt 框架在Qt發(fā)展到4.0的時候,PyQt4 框架誕生了,通過python平臺調(diào)用Qt庫,實(shí)現(xiàn)了python的圖形化界面。
通過python編寫的框架,讓代碼編寫更加明了清晰,調(diào)用也更為方便。
PyQt由于是不完全開源的,Qt的運(yùn)營商 諾基亞 交涉無果之后,自行開發(fā)了完全免費(fèi)開源的python庫PySide。
由于兩個 python 庫都是基于 C++ 的 Qt 框架下實(shí)現(xiàn)的,因此在使用的API上基本保持一致。
當(dāng)然后面 Qt 發(fā)展到 5.0 之后,也誕生了 PyQt5 以及 PsSide2 , 框架的使用上也有別于之前的版本。
由于 PySide 的開源商用免費(fèi),如今大多數(shù)軟件開發(fā)都使用了PySide 最為 Python 平臺的選擇。
Qt.py 多版本Qt兼容由于在 Qt4.0 到 Qt5.0 的API差異,以及 python 平臺下兩個庫的使用,導(dǎo)致 Qt 代碼的兼容非常麻煩。
為了解決兼容問題,github上有開源的 Qt.py 腳本,通過這個腳本就可以用 Qt5.0 使用方式兼容 Qt4.0 的寫法,以及 PyQt 和 PySide 的不同平臺的差異問題。
不過使用這個兼容腳本會導(dǎo)致 代碼編輯器(IDE) 的代碼補(bǔ)全失效 (:з」∠)
Python Qt 在CG行業(yè)的運(yùn)用
插件開發(fā)由于Qt跨平臺的特性,以及Python的膠水語言的便利,太多CG軟件支持Qt的開發(fā)。
正如上文提到的 Houdini、Maya、Nuke 都支持通過 Python 的 Qt 庫來編寫圖形化界面。
那么Qt編寫界面的優(yōu)勢在哪里呢?
下面我用maya原生的MEL代碼編寫界面來對比 PyQt 的實(shí)現(xiàn)效果
MEL & cmds VS PySide 圖形界面開發(fā)下面我來寫出一個 hello world 標(biāo)題的窗口界面舉例。
1
2
3
4
5
6
7proc printHelloWorld(){
print "hello,World";
}
string $window = `window "使用 MEL 編寫窗口"`;
columnLayout;
button -c "printHelloWorld()" "hello,world";
showWindow $window;
如果你不喜歡MEL語言,也可以將其轉(zhuǎn)換為 maya cmds 命令庫來實(shí)現(xiàn)
1
2
3
4
5
6
7
8from maya import cmds
def printHelloWorld(e):
print "hello,World"
window = cmds.window("使用 maya cmds 編寫窗口")
cmds.columnLayout()
cmds.button("hello,world",c=printHelloWorld)
cmds.showWindow(window)
下面是使用 Qt 的方式來實(shí)現(xiàn)
1
2
3
4
5
6
7
8
9
10
11
12
13
14from PySide2.QtGui import *
from PySide2.QtWidgets import *
from PySide2.QtCore import *
def printHelloWorld(self):
print "hello,world"
window = QWidget()
window.setWindowTitle(u"歡迎使用 PySide2 編寫窗口")
button = QPushButton("hello,world")
button.clicked.connect(printHelloWorld)
layout = QHBoxLayout()
layout.addWidget(button)
window.setLayout(layout)
window.show()
除了上述的實(shí)現(xiàn)方案之外,也可以使用類來封裝,這種寫法更加優(yōu)雅一些
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16from PySide2.QtGui import *
from PySide2.QtWidgets import *
from PySide2.QtCore import *
class Window(QWidget):
def __init__(self):
super(Window,self).__init__()
self.setWindowTitle(u"歡迎使用 PySide2類 編寫窗口")
self.button = QPushButton("hello,world")
self.button.clicked.connect(self.printHelloWorld)
self.layout = QHBoxLayout()
self.layout.addWidget(self.button)
self.setLayout(self.layout)
self.show()
def printHelloWorld(self):
print "hello,world"
a = Window()
看完上面的代碼實(shí)現(xiàn)之后,會有種感覺,使用PySide的實(shí)現(xiàn)要寫更多的代碼,豈不是更加麻煩嗎?
其實(shí) MEL 實(shí)現(xiàn)的圖形化界面也是調(diào)用了 Qt 框架,只是在調(diào)用上進(jìn)行封裝,因此用更少的代碼就可以實(shí)現(xiàn)而已。
那在開發(fā)的過程中到底孰優(yōu)孰劣呢?
在CG行業(yè)中應(yīng)該選擇哪一個進(jìn)行圖形界面開發(fā)呢?
其實(shí) MEL 或者 maya cmds 命令實(shí)現(xiàn)要比 PySide 簡單很多,如果只是寫一個簡單的圖形化界面的話,用原生實(shí)現(xiàn)就已經(jīng)足夠了。
最直觀的典型就是 advance skeleton 這款綁定插件了,如此復(fù)雜的界面其實(shí)全部都是用 MEL 實(shí)現(xiàn)的。
有興趣的可以研究它的 MEL 源碼,3萬多行代碼是真的牛逼。
那 Python Qt 的框架優(yōu)勢在哪里呢?
QtDesigner 組件拖拽式開發(fā)
組件封裝擴(kuò)展
多重事件響應(yīng)觸發(fā)
qss 自定義樣式支持
自定義響應(yīng)信號
如果不需要上述這些特性的話,那么完全可以依靠原生來編寫界面
那么上述五個特性到底是個啥,就留到后面的教程娓娓道來吧。
總結(jié)
以上是生活随笔為你收集整理的python qt教程_Python - Python Qt 开发教程(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot初始化加载数据_Sp
- 下一篇: python 打开网页 并填表单_Win