目次:
まえがき
1つ目の続き。そのまま翻訳してみた。
Qt6に導入された主な変更点
exec()またはexec_()
この.exec()メソッドは、QApplicationまたはダイアログボックスのイベントループを開始するためにQtで使用される。Python 2.7execではキーワードだった。
つまり、変数、関数、またはメソッドの名前には使用できなかった。PyQt4とPySideの両方で使用された解決策は、この競合を回避するため「.exec」の使用の名前を「exec_()」に変更することだった。
Python 3はexecキーワードを削除し、名前を解放して使用できるようにした。PyQt6の結果として、.exec()呼び出しはQtと同じように名前が付けられます。ただし、PySide6は引き続き「.exec_()」を使用します。
スロットと信号
カスタムスロットとシグナルの定義では、2つのライブラリ間でわずかに異なる構文が使用される。PySide6はこのインターフェイスをSignalとSlotという名前で提供し、PyQt6はこれらをpyqtSignal とpyqtSlotとして提供する。それらの両方の動作は、スロットと信号の定義と同じ。
シグナルの場合:
my_custom_signal = pyqtSignal() # PyQt6 my_custom_signal = Signal() # PySide6 my_other_signal = pyqtSignal(int) # PyQt6 my_other_signal = Signal(int) # PySide6
スロットの場合:
@pyqtslot def my_custom_slot(): pass @Slot def my_custom_slot(): pass
PyQt6とPySide6の間で一貫性を確保したい場合は、PyQt6の次のインポートパターンを使用してSignal、@Slotそこでもスタイルを使用できる。
from PyQt6.QtCore import pyqtSignal as Signal, pyqtSlot as Slot
QMouseEvent
PyQt6では、QMouseEventオブジェクトには、イベントの位置にアクセスするための.pos()、.x()または.y()省略形のプロパティメソッドがない。.position()プロパティを使用してQPointオブジェクトを取得し、そのオブジェクトの.x()または.y()メソッドにアクセスする必要がある。この.position()メソッドは、PySide6でも使用でる。
PySide6にはあるが、PyQt6にはない機能
Qt 6以降、PySideは2つのPython__feature__フラグをサポートして、変数名と、getter / setter関数を使用するのではなく、プロパティを直接割り当ててアクセスする機能を使用して、コードをよりsnake_case Pythonicにするのに役立つ。以下の例は、これらの変更がコードに与える影響を示している。
table = QTableWidget() table.setColumnCount(2) button = QPushButton("Add") button.setEnabled(False) layout = QVBoxLayout() layout.addWidget(table) layout.addWidget(button)
同じコードですがsnakecase、trueproperty有効になっている。
from __feature__ import snake_case, true_property table = QTableWidget() table.column_count = 2 button = QPushButton("Add") button.enabled = False layout = QVBoxLayout() layout.add_widget(table) layout.add_widget(button)
むすび
気になったのはこれくらい。以上、解散!
参考文献
MARTIN FiTZPATRiCK.: PyQt6 vs PySide6: What’s the difference between the two Python Qt libraries?
コメント