PyQt5からPyQt6へ(Pythonスクリプトの書き換え) 2


はじめに

以前も同様の記事を書きました。
touch-sp.hatenablog.com
今回は別のPyQt5のスクリプトをPyQt6に書き換えました。
PyQt5のスクリプトはこちらです。
touch-sp.hatenablog.com
PyQt6に関してはいろいろ調べても情報が少ないです。
もしかしたらPyQt自体がオワコンなのかもしれません。

変更点

前回の記事と重複する部分は省略します。

setAlignmentの書き方

変更前

self.label_q.setAlignment(Qt.AlignCenter)

変更後

self.label_q.setAlignment(Qt.AlignmentFlag.AlignCenter)

KeyPressEventの書き方

変更前

if e.key() == Qt.Key_Return:

変更後

if e.key() == Qt.Key.Key_Return:

最終的なPythonスクリプト

import pickle
import random
import sys
from PyQt6.QtCore import Qt
from PyQt6.QtWidgets import *
from PyQt6.QtGui import QFont

with open('words_dict.pkl', 'rb') as f:
    words_dict = pickle.load(f)

dict_keys = words_dict.keys()

class Window(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()
        self.question = ''
        self.new_question = True
        
    def initUI(self):
        
        font = QFont()
        font.setFamily('Times')
        font.setPointSize(20)
        font.setBold(True)

        self.start_button = QPushButton('start')
        self.start_button.setFont(font)
        self.label_q = QLabel()
        self.label_q.setAlignment(Qt.AlignmentFlag.AlignCenter)

        self.label_q.setFont(font)

        self.label_a = QLabel()
        self.label_a.setAlignment(Qt.AlignmentFlag.AlignCenter)
        self.label_a.setFont(font)
        
        layout = QVBoxLayout()
        layout.addWidget(self.label_q)
        layout.addWidget(self.label_a)
        self.setLayout(layout)
        self.show()

    def keyPressEvent(self, e):
        
        if e.key() == Qt.Key.Key_Return:
            if self.new_question == True:
                self.label_a.clear()
                self.question = random.choice(list(dict_keys))
                self.label_q.setText(self.question)
                self.new_question = False
            else:
                self.label_a.setText(', '.join(words_dict[self.question]))
                self.new_question = True

app = QApplication(sys.argv)
ex =Window()
ex.setWindowTitle('単語帳')
ex.setGeometry(100,100,400,200)
sys.exit(app.exec())