日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python qt教程_Python - Python Qt 开发教程(1)

發布時間:2025/3/19 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python qt教程_Python - Python Qt 开发教程(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言寫文章之前我都喜歡加個前言,說說自己的感受,這次也不例外。

這篇文章是學習 Python Qt 半年來出的教程,因此教程的質量并不能保證,只是將自己的經驗分享給大家。

Python Qt 圖形界面開發需要有一定的編程基礎,觀看本教程之前要有Python的使用基礎。

因為我本人是 流程TD ,開發環境主要在 Maya 上,因此這套教程主要針對于 Maya 的 開發環境,不過Qt是通用于各個軟件平臺的,有問題可以相互交流。

什么是Qt

Qt具體是什么,可以自行網上百度.

簡單地說就是一個跨平臺的圖形化框架,通過這個框架可以實現跨平臺的軟件界面。

跨平臺主要指可以在多個平臺上運行,最通俗的說法是兼容 Linux、Mac、Windows 這三個最常用的系統。

Qt曾經由諾基亞公司維護,目前由Digia公司維護,在桌面軟件開發上有不可撼動的地位。

為什么使用Qt由于Qt可以減少跨平臺維護的問題。

如今很多軟件都是利用Qt搭建圖形化界面,包括但不限于Houdini、Maya、Nuke等等

作為插件開發者,掌握Qt的圖形化開發可以極大加快開發效率。

Qt開發使用的語言Qt這個框架是使用 C++ 代碼實現的,在現成的軟件中嵌入 C++ 代碼是非常不便的。

而python作為膠水語言、腳本語言,補足了這方面的短板。

python之所以這么好,原因是底層也是基于 c 語言。

python Qt 框架在Qt發展到4.0的時候,PyQt4 框架誕生了,通過python平臺調用Qt庫,實現了python的圖形化界面。

通過python編寫的框架,讓代碼編寫更加明了清晰,調用也更為方便。

PyQt由于是不完全開源的,Qt的運營商 諾基亞 交涉無果之后,自行開發了完全免費開源的python庫PySide。

由于兩個 python 庫都是基于 C++ 的 Qt 框架下實現的,因此在使用的API上基本保持一致。

當然后面 Qt 發展到 5.0 之后,也誕生了 PyQt5 以及 PsSide2 , 框架的使用上也有別于之前的版本。

由于 PySide 的開源商用免費,如今大多數軟件開發都使用了PySide 最為 Python 平臺的選擇。

Qt.py 多版本Qt兼容由于在 Qt4.0 到 Qt5.0 的API差異,以及 python 平臺下兩個庫的使用,導致 Qt 代碼的兼容非常麻煩。

為了解決兼容問題,github上有開源的 Qt.py 腳本,通過這個腳本就可以用 Qt5.0 使用方式兼容 Qt4.0 的寫法,以及 PyQt 和 PySide 的不同平臺的差異問題。

不過使用這個兼容腳本會導致 代碼編輯器(IDE) 的代碼補全失效 (:з」∠)

Python Qt 在CG行業的運用

插件開發由于Qt跨平臺的特性,以及Python的膠水語言的便利,太多CG軟件支持Qt的開發。

正如上文提到的 Houdini、Maya、Nuke 都支持通過 Python 的 Qt 庫來編寫圖形化界面。

那么Qt編寫界面的優勢在哪里呢?

下面我用maya原生的MEL代碼編寫界面來對比 PyQt 的實現效果

MEL & cmds VS PySide 圖形界面開發下面我來寫出一個 hello world 標題的窗口界面舉例。

1

2

3

4

5

6

7proc printHelloWorld(){

print "hello,World";

}

string $window = `window "使用 MEL 編寫窗口"`;

columnLayout;

button -c "printHelloWorld()" "hello,world";

showWindow $window;

如果你不喜歡MEL語言,也可以將其轉換為 maya cmds 命令庫來實現

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 的方式來實現

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()

除了上述的實現方案之外,也可以使用類來封裝,這種寫法更加優雅一些

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()

看完上面的代碼實現之后,會有種感覺,使用PySide的實現要寫更多的代碼,豈不是更加麻煩嗎?

其實 MEL 實現的圖形化界面也是調用了 Qt 框架,只是在調用上進行封裝,因此用更少的代碼就可以實現而已。

那在開發的過程中到底孰優孰劣呢?

在CG行業中應該選擇哪一個進行圖形界面開發呢?

其實 MEL 或者 maya cmds 命令實現要比 PySide 簡單很多,如果只是寫一個簡單的圖形化界面的話,用原生實現就已經足夠了。

最直觀的典型就是 advance skeleton 這款綁定插件了,如此復雜的界面其實全部都是用 MEL 實現的。

有興趣的可以研究它的 MEL 源碼,3萬多行代碼是真的牛逼。

那 Python Qt 的框架優勢在哪里呢?

QtDesigner 組件拖拽式開發

組件封裝擴展

多重事件響應觸發

qss 自定義樣式支持

自定義響應信號

如果不需要上述這些特性的話,那么完全可以依靠原生來編寫界面

那么上述五個特性到底是個啥,就留到后面的教程娓娓道來吧。

總結

以上是生活随笔為你收集整理的python qt教程_Python - Python Qt 开发教程(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。