PySide6 是 Qt6 官方維護的 Python binding: Qt for Python
1
2
3
4
5
6
7
8
9
10
11
| from PySide6 import QtWidgets
# 開始運行(instantiate) QApplication
app = QtWidgets.QApplication([])
# 建立一個簡易版的視窗元件, QDialog
window = QtWidgets.QDialog()
window.show()
# 開始 QApplication 的事件迴圈
app.exec()
|
sys.argv
如果希望執行的時候可以讀取命令列參數,可以把sys.argv傳給QApplication.
1
2
3
4
5
6
7
8
| import sys
from PySide6 import QtWidgets
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QDialog()
window.show()
app.exec()
|
QDialog vs QMainWindow
上面例子的視窗元件是 QDialog, 沒太複雜的功能. 用 QMainWindow 取代 QDialog 的話, QMainWindow內建有 menu, status bar, toolbar 等等平常習慣的"視窗"會有的功能.
1
2
3
4
5
6
7
8
| import sys
import PySide6.QtWidgets as QtWidgets
app = QtWidgets.QApplication(sys.argv)
window = QtWidgets.QMainWindow()
window.show()
app.exec()
|
Autodesk Maya
在 Maya 中建立一個 Qt 視窗有一些需要留意的地方.
- PySide2
上面的例子使用都是 PySide6, 而 Autodesk 在 Maya bundle 的版本是 PySide2.
- QApplication
Maya 開始執行的時候就初始化了必要的 Qt 環境, 不需要再做一次.
1
2
3
4
| import PySide2.QtWidgets as QtWidgets
window = QtWidgets.QMainWindow()
window.show()
|
Parent to Maya Window
把創建出來的視窗 parent 到 Maya 主視窗之下可以讓前者像 Maya 其他的工具視窗一樣不會被主視窗蓋住. Alt Tab 切換視窗的時候它也不會被視為另外一個 Application. 如果不 parent 的話則可以讓 user 使用 Alt Tab 在 Maya 和這個視窗之間切換.
1
2
3
4
5
6
7
8
9
10
11
12
13
| import shiboken2 # 橋接python 和 Qt C++ 物件的模組, shipped with Maya
import maya.OpenMayaUI as OpenMayaUI
import PySide2.QtWidgets as QtWidgets
# 取得指向 Maya主視窗的 QWidget 指標
ptr = OpenMayaUI.MQtUtil.mainWindow()
# 把指標只向的位置wrap成一個 python object(QWidget in this case)
maya_win = shiboken2.wrapInstance(int(ptr), QtWidgets.QWidget)
# Instance QMainWindow 時的第一個 positional argument 會被當作 parent 物件.
window = QtWidgets.QMainWindow(maya_win)
window.show()
|