Bir görüntü dosyasını (PNG) basit bir pencerede nasıl görüntülerim?


9

Bir RFID projesi için göstermem gereken bir prototipim var. RFID (Parallax USB) çalışıyorum ve örnek Python betiği (benim ilk) kartın kimliğini tam da olması gerektiği gibi gösteriyor ... sorun şu ki, çok zorlayıcı bir demo / prototip değil.

Yapmak istediğim şey, benim pi pi başlatmak ve bir şekilde bir PNG ekran var. Yeni pencere, tam ekran, vs. Daha sonra, Pi tarafından bir kart algılandığında, görüntülenen görüntüyü değiştirir (2.PNG için 1.PNG, vb.).

Ekranın sadece bir görüntü dosyası görüntülemesinin en pragmatik, en kolay, en hızlı yolu ne olurdu?

İşte RFID çıktı benim kod:

#! /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()

Başvurunuzu nasıl çalıştıracaksınız? Bir GUI mi yoksa sadece bir komut satırı kabuğundan mı olacaksınız?
HeatfanJohn

Muhtemelen "yapabildiğim her şekilde" cevap verirdim. Gerçekten herhangi bir çözüme açığım. LXDE kullanıyorum, bu yüzden kesinlikle bir seçenek. Bir süredir programlamadım, bu yüzden eğlenceli bir mücadeleydi ve henüz "hayır yapamıyorum ..." tarafından henüz yorgun değilim. Gerçekten bir çeşit "süper keşif modu" ve sadece python her türlü çözümleri denemek bir patlama yaşıyorum.
Jeff

Yanıtlar:


6

LXDE gibi bir X11 Masaüstü Ortamı kullanıyorsanız, bunu bu makalede gösterilen temel mantığı kullanarak yapabilirsiniz .

Her bir anahtar arasında 30 saniye bekleyen iki görüntüyü göstermek için geçiş yapmak için geldim. RFID sensörünüzden okuduğunuza göre görüntüleri değiştirmek için mantığınızı ekleyebilmeniz gerekir.

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()

Hangi görüntünün görüntüleneceğini belirlemek için 1000 ms beklemek ve RFID durumunuzu test etmek için bunu değiştirebilmeniz gerekir.


Bu harika. PIL'i kurdum, python-tk zaten en son sürüm ve görüntü dosyalarını "window.py" ile aynı dizine kopyaladığımlarla eşleştirmek için yeniden adlandırdım. Python altında çalıştırdığımda python window.pyhatayı alıyorum: ImportError: cannot import name ImageTk Nasıl giderileceğini görmek için şimdi kazma.
Jeff

Programı bu makaleyi başvuru olarak kullanarak tkinter'i doğru şekilde kullanacak biçimde güncelleştirdim .
HeatfanJohn

Ben düzenlemeyi onayladığınız geçti ama birisi önerdi yüzden piton kullanıcı değilim from ttk importolmalı from Tkinter.ttk import- ama bu da benim tahminim olması gerektiği olduğunu yanlış gibi geliyor bana from tk importişte bu yana, asTkinter için.
goldilocks

7

Wand bir ekran modülüne / yöntemine sahiptir .

Terminalde

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

Bir Python betiğinde

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

teşekkür ederim, bu harika ... hatta anında görüntüyü değiştirebilirsiniz, bu yüzden basit animasyonlar da ya da oyunlar ya da her türlü yapmak için harika ...
Flash Thunder

2

Komut satırından bir görüntü görüntülemek istiyorsanız, "fbi" konsol programını sudo apt-get install -y fbi

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.