✨
PySide6 002
MainWindowをカスタマイズ
もうちょっと実用的なアプリケーションとして画像ビューワーを作ってみましょう
ImageViewer_001.py
import sys
from PySide6.QtWidgets import QApplication, QMainWindow
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Hello World")
self.setGeometry(100, 100, 800, 600)
def main():
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
if __name__ == "__main__":
main()
メニューの追加
QMainWindowのmenuBar()で取得したQMenuBarオブジェクトにたいしてaddMenu()でメニューを追加します
def create_menu(self):
menu_bar = self.menuBar()
file_menu = menu_bar.addMenu("File")
file_menu.addAction("Open")
file_menu.addAction("Exit")
追加されましたね
今度はメニューを選択したときのアクションを追加してみましょう
import sys
from PySide6.QtWidgets import (
QApplication, QMainWindow,
QMessageBox, QFileDialog)
from PySide6.QtGui import QAction
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Hello World")
self.setGeometry(100, 100, 800, 600)
self.create_menu()
def create_menu(self):
menu_bar = self.menuBar()
file_menu = menu_bar.addMenu("File")
open_action = QAction("開く", self)
open_action.triggered.connect(self.open_file)
file_menu.addAction(open_action)
exit_action = QAction("終了", self)
exit_action.triggered.connect(self.exit_application)
file_menu.addAction(exit_action)
def open_file(self):
file_name, _ = QFileDialog.getOpenFileName(self, "Open File", "", "Images (*.jpg *.png *.gif)")
QMessageBox.information(self, "開く", file_name.split('/')[-1])
def exit_application(self):
self.close()
def main():
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
if __name__ == "__main__":
main()
選択したファイルを表示する
scrollエリアを追加
QPixmapを使って選択した画像を読み込み
QLabelのsetPixmapでLabelに画像を表示している。
sinple_image_viewer.py
import sys
from PySide6.QtWidgets import (
QApplication, QMainWindow, QScrollArea,
QMessageBox, QFileDialog, QLabel)
from PySide6.QtGui import QAction, QPixmap
from PySide6.QtCore import Qt
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Hello World")
self.setGeometry(100, 100, 800, 600)
self.current_pixmap = None
self.image_label = QLabel()
self.scroll_area = QScrollArea(self)
self.scroll_area.setWidgetResizable(True)
self.setCentralWidget(self.scroll_area)
self.scroll_area.setWidget(self.image_label)
self.image_label.setAlignment(Qt.AlignCenter)
self.scroll_area.setWidget(self.image_label)
self.create_menu()
def create_menu(self):
menu_bar = self.menuBar()
file_menu = menu_bar.addMenu("File")
open_action = QAction("開く", self)
open_action.triggered.connect(self.open_file)
file_menu.addAction(open_action)
exit_action = QAction("終了", self)
exit_action.triggered.connect(self.exit_application)
file_menu.addAction(exit_action)
def open_file(self):
file_name, _ = QFileDialog.getOpenFileName(self, "Open File", "", "Images (*.jpg *.png *.gif)")
self.show_image(file_name)
def show_image(self, file_name):
self.current_pixmap = QPixmap(file_name)
self.image_label.setPixmap(self.current_pixmap)
def exit_application(self):
self.close()
def main():
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
if __name__ == "__main__":
main()
Discussion