シンプルなウィンドウに画像ファイル(PNG)を表示するにはどうすればよいですか?


9

RFIDプロジェクトで表示する必要のあるプロトタイプを持っています。RFID(Parallax USB)が機能していて、サンプルのPythonスクリプト(私の最初のスクリプト)が想定どおりにカードのIDを表示しています...問題は、非常に説得力のあるデモ/プロトタイプではないことです。

私ができることを望んでいるのは、piでアプリケーションを起動し、どういうわけかPNGディスプレイを表示することです。新しいウィンドウ、フルスクリーンなど。次に、Piによってカードが検出されると、表示されている画像が入れ替わります(2.PNGの場合は1.PNGなど)。

画面に画像ファイルだけを表示させる最も実用的で、最も簡単で、最も速い方法は何でしょうか?

RFIDを出力する私のコードは次のとおりです。

#! /usr/bin/python
import serial
import time

ser = serial.Serial('/dev/ttyUSB0', 2400, timeout=1) # replace '/dev/ttyUSB0' with your port

while True:
    response = ser.read(12)
    if response <> "":
        print "raw: " + str(response)
        print "hex: " + str(response[-8:])
        print "dec: " + str(int(response[-8:], 16))
    time.sleep(1)

ser.close()

アプリケーションをどのように実行しますか?GUIを使用しますか、それともコマンドラインシェルから使用しますか?
HeatfanJohn

たぶん、「できる限り」と答えるでしょう。私は本当にどんな解決策にもオープンです。私はLXDEを使用しているので、それは間違いなくオプションです。私はしばらくプログラムしていないので、それは楽しい挑戦でした、そして、「いいえ、私はできません...」にまだ動揺していません。私は本当に一種の「超探検モード」で、Pythonであらゆる種類のソリューションを試してみるだけで爆発しています。
Jeff

回答:


6

LXDEなどのX11デスクトップ環境を使用している場合は、この記事に示す基本的なロジックを使用してこれを実現できます。

ここに私が思いついたのは、各スイッチの間に30秒待機する2つの画像を表示するスイッチです。RFIDセンサーから読み取ったものに基づいて画像を切り替えるためのロジックを挿入できるはずです。

displayImages.py

#!/usr/bin/python

# use a Tkinter label as a panel/frame with a background image
# note that Tkinter only reads gif and ppm images
# use the Python Image Library (PIL) for other image formats
# free from [url]http://www.pythonware.com/products/pil/index.htm[/url]
# give Tkinter a namespace to avoid conflicts with PIL
# (they both have a class named Image)

import Tkinter as tk
from PIL import Image, ImageTk
from Tkinter.ttk import Frame, Button, Style
import time

class Example():
    def __init__(self):
        self.root = tk.Tk()
        self.root.title('My Pictures')

        # pick an image file you have .bmp  .jpg  .gif.  .png
        # load the file and covert it to a Tkinter image object
        imageFile = "babyAce.jpg"
        self.image1 = ImageTk.PhotoImage(Image.open(imageFile))
        self.image2 = ImageTk.PhotoImage(Image.open("baby-marti.jpg"))

        # get the image size
        w = self.image1.width()
        h = self.image1.height()

        # position coordinates of root 'upper left corner'
        x = 0
        y = 0

        # make the root window the size of the image
        self.root.geometry("%dx%d+%d+%d" % (w, h, x, y))

        # root has no image argument, so use a label as a panel
        self.panel1 = tk.Label(self.root, image=self.image1)
        self.display = self.image1
        self.panel1.pack(side=tk.TOP, fill=tk.BOTH, expand=tk.YES)
        print "Display image1"
        self.root.after(30000, self.update_image)
        self.root.mainloop()

def update_image(self):
    if self.display == self.image1:
        self.panel1.configure(image=self.image2)
        print "Display image2"
        self.display = self.image2
    else:
        self.panel1.configure(image=self.image1)
        print "Display image1"
        self.display = self.image1
    self.root.after(30000, self.update_image)       # Set to call again in 30 seconds

def main():
    app = Example()

if __name__ == '__main__':
    main()

これを変更して1000ミリ秒待機し、RFIDステータスをテストして、表示する画像を決定できます。


これは素晴らしいです。PILをインストールしました。python-tkはすでに最新バージョンであり、「window.py」と同じディレクトリにコピーしたものと一致するようにイメージファイルの名前を変更しました。Pythonで実行すると python window.py、エラーが発生します。ImportError: cannot import name ImageTk 今すぐ掘り下げて、トラブルシューティングの方法を確認してください。
Jeff

この記事を参考にして、tkinterを適切に使用するようにプログラムを更新しました。
HeatfanJohn 2014

私が編集を承認の上に渡されたので、私はPythonのユーザーではないんだけど、提案誰かがfrom ttk importなければなりませんfrom Tkinter.ttk import私の推測では、それがあるべきであるが、それはまた、間違ったとして私を打つ- from tk importそれはだから、asTkinterのために。
ゴルディロックス

7

ワンドには表示モジュール/メソッドがあります。

ターミナルで

$ python -m wand.display wandtests/assets/mona-lisa.jpg

Pythonスクリプト

import wand
with Image(blob=file_data) as image:
    wand.display.display(IMAGE)

偉大である、あなたに感謝それは、aswellやゲームを簡単なアニメーションを作成するための素晴らしいですので...あなたも、その場で画像を変更することができ、または何...
フラッシュサンダー

2

コマンドラインから画像を表示する場合は、「fbi」コンソールプログラムを次のコマンドで使用できます。 sudo apt-get install -y fbi

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.