ฉันจะแสดงไฟล์รูปภาพ (PNG) ในหน้าต่างแบบง่ายได้อย่างไร?


9

ฉันมีต้นแบบฉันต้องแสดงโครงการ RFID ฉันทำงาน RFID (Parallax USB) แล้วและสคริปต์ Python (ตัวอย่างแรกของฉัน) กำลังแสดง ID ของการ์ดเหมือนที่มันควรจะเป็น ... ปัญหาคือมันไม่ใช่การสาธิต / ต้นแบบที่น่าสนใจมาก

สิ่งที่ฉันชอบที่จะทำคือเปิดแอปพลิเคชันของฉันบน pi และแสดง PNG อย่างใด หน้าต่างใหม่แบบเต็มหน้าจอ ฯลฯ จากนั้นเมื่อตรวจพบการ์ดโดย Pi มันจะทำการสลับภาพที่แสดง (1.PNG สำหรับ 2.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 ดังนั้นมันจึงเป็นตัวเลือก ฉันยังไม่ได้ตั้งโปรแกรมในขณะนี้ดังนั้นมันจึงเป็นความท้าทายที่สนุกและฉันยังไม่ได้รับความเบื่อหน่ายโดย "ไม่ฉันไม่สามารถ ... " ดังนั้นฉันจึงขอขอบคุณตัวเลือกใด ๆ ฉันอยู่ในโหมด "super exploratory" จริงๆและมีการระเบิดแค่พยายามแก้ปัญหาทุกอย่างในหลาม
Jeff

คำตอบ:


6

หากคุณกำลังใช้ X11 สภาพแวดล้อมเดสก์ทอปเช่นLXDEแล้วคุณสามารถทำได้โดยใช้ตรรกะพื้นฐานที่ปรากฏในบทความนี้

นี่คือสิ่งที่ฉันคิดขึ้นเพื่อสลับการแสดงภาพสองภาพรอ 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()

คุณควรจะสามารถแก้ไขสิ่งนี้เพื่อรอ 1,000 ms และทดสอบสถานะ 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

ในสคริปต์ Python

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.