간단한 창에 이미지 파일 (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를 사용하고 있으므로 확실히 옵션입니다. 나는 한동안 프로그래밍하지 않았기 때문에 재미있는 도전이었고, 아직 "나는 할 수 없습니다 ..."라는 말로 지치지 않았으므로 모든 옵션에 감사드립니다. 나는 실제로 일종의 "슈퍼 탐험 모드"에 있으며 파이썬에서 모든 종류의 솔루션을 시험 해보고 있습니다.
Jeff

답변:


6

LXDE 와 같은 X11 데스크탑 환경을 사용하는 경우이 기사에 표시된 기본 로직을 사용하여이를 수행 할 수 있습니다 .

다음은 각 스위치 사이에 30 초 동안 두 개의 이미지를 표시하는 스위치입니다. 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()

1000ms 동안 대기하고 RFID 상태를 테스트하여 표시 할 이미지를 결정할 수 있도록이를 수정해야합니다.


대단해. PIL을 설치했습니다. python-tk는 이미 최신 버전이며 "window.py"와 같은 디렉토리에 복사 한 이미지와 일치하도록 이미지 파일의 이름을 변경했습니다. 파이썬으로 파이썬을 실행할 때 python window.py오류가 발생합니다 : ImportError: cannot import name ImageTk 이제 그것을 파헤 치면 문제를 해결하는 방법을 볼 수 있습니다.
Jeff

이 기사 를 참조로 tkinter를 올바르게 사용하도록 프로그램을 업데이트했습니다 .
HeatfanJohn

내가 편집 승인에 통과하지만, 누군가 제안 그래서 나는 파이썬 사용자 아니에요 from ttk import해야합니다 from Tkinter.ttk import-하지만 그 또한 내 생각 엔 그것이 있어야하고, 잘못된 인상을 받았는데 from tk import그이 (가)이기 때문에, asTkinter를 위해.
goldilocks

7

완드 에는 디스플레이 모듈 / 방법이 있습니다.

터미널에서

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

파이썬 스크립트에서

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

감사합니다. 훌륭합니다. 이미지를 즉시 변경할 수도 있으므로 간단한 애니메이션이나 게임 등을 만드는 데 유용합니다.
Flash Thunder

2

명령 행에서 이미지를 표시하려면 "fbi"콘솔 프로그램을 sudo apt-get install -y fbi

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.