投稿

8月 17, 2025の投稿を表示しています

Python で ローカルディスクにある画像ファイルを 選択して画面に表示するプログラムを作成してください。

 Pythonでローカルディスクにある画像ファイルを選択し、画面に表示するプログラムを作成するには、 Tkinter という標準ライブラリと、画像処理に便利な Pillow ライブラリを組み合わせるのが一般的です。 以下のサンプルコードは、ボタンをクリックして複数の画像ファイルを選択し、新しいウィンドウにそれらを表示するプログラムです。 画像の向きが正しく表示されない問題は、画像ファイルに埋め込まれているExif情報(撮影時のカメラの向きなど)を考慮せずに表示していることが原因です。Pillowライブラリの Image.transpose() メソッドを使って、この情報を反映させるように修正します。 ImageDisplay クラスの display_images メソッド内の画像処理部分を、以下のコードに置き換えてください。 修正後のプログラムコード import tkinter as tk from tkinter import filedialog from PIL import Image, ImageTk, ExifTags # 画像を表示するウィンドウ(Toplevel)のクラス class ImageDisplay(tk.Toplevel):     def __init__(self, parent, image_paths):         super().__init__(parent)         self.title("選択された画像")                  # スクロールバー付きのフレームを作成         canvas = tk.Canvas(self)         scrollbar = tk.Scrollbar(self, orient="vertical", command=canvas.yview)         scrollable_frame = tk.Frame(canvas) ...

Pythonにおけるイテレーターとは

  Pythonにおけるイテレーターは、 反復可能なオブジェクト(リスト、タプルなど)の要素を一つずつ取り出すための仕組み を提供するオブジェクトです。これにより、メモリ効率の良い反復処理が可能になります。 イテレーターの仕組み イテレーターは、以下の2つのメソッドを持つことで反復処理を可能にします。 __iter__() メソッド : イテレーター自身を返します。これにより、オブジェクトがイテレーターであることを示します。 __next__() メソッド : 次の要素を返します。要素がなくなると、 StopIteration 例外を発生させて、反復処理の終了を知らせます。 この2つのメソッドを備えたオブジェクトがイテレーターであり、Pythonの for ループは内部的にこれらのメソッドを呼び出して反復処理を実行します。 サンプルコードと解説 以下のサンプルコードでは、イテレーターの仕組みを理解するために、 MyRange というカスタムクラスを作成します。このクラスは、Pythonの組み込み range() 関数と同様の機能を提供しますが、その内部でイテレーターがどのように機能するかを示します。 Python class MyRange : def __init__ ( self, start, end ): self.current = start self.end = end # 1. __iter__() メソッド def __iter__ ( self ): """イテレーター自身を返す""" return self # 2. __next__() メソッド def __next__ ( self ): """次の要素を返す""" if self.current < self.end: # 条件を満たせば、現在の要素を返す number = self.current self.curren...