मैं एक साधारण विंडो में एक छवि फ़ाइल (पीएनजी) कैसे प्रदर्शित करूं?


9

मुझे एक प्रोटोटाइप मिला है जिसे मुझे RFID प्रोजेक्ट के लिए दिखाना होगा। मुझे RFID (Parallax USB) काम कर रहा है, और सैंपल Python script (मेरा पहला) कार्ड की आईडी को उसी तरह प्रदर्शित कर रहा है जैसे यह माना जाता है ... समस्या है, यह बहुत ही आकर्षक डेमो / प्रोटोटाइप नहीं है।

जो मैं करने में सक्षम हूं, वह पीआई पर अपना एप्लिकेशन लॉन्च करने और किसी भी तरह पीएनजी प्रदर्शित करने में सक्षम है। नई विंडो, पूर्ण स्क्रीन, इत्यादि, जब पाई द्वारा एक कार्ड का पता लगाया जाता है, तो यह प्रदर्शित की जा रही छवि को स्वैप कर देगा (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 का उपयोग कर रहे होंगे या सिर्फ कमांड लाइन के खोल से?
हीटफैनजॉन

मैं शायद जवाब दूंगा, "किसी भी तरह से मैं कर सकता हूं"। मैं वास्तव में किसी भी समाधान के लिए खुला हूँ। मैं एलएक्सडीई का उपयोग कर रहा हूं, इसलिए यह निश्चित रूप से एक विकल्प है। मैंने थोड़ी देर में प्रोग्राम नहीं किया है, इसलिए यह एक मजेदार चुनौती है, और मैं अभी तक "नहीं मैं नहीं कर सकता ..." से परेशान हो गया है, इसलिए मैं किसी भी और सभी विकल्पों की सराहना करता हूं। मैं वास्तव में "सुपर एक्सप्लोसिव मोड" के एक प्रकार में हूं और अजगर में सभी प्रकार के समाधानों की कोशिश कर रहा है।
जेफ

जवाबों:


6

यदि आप X11 डेस्कटॉप पर्यावरण जैसे LXDE का उपयोग कर रहे हैं , तो आप इस लेख में दिखाए गए मूल तर्क का उपयोग करके इसे पूरा कर सकते हैं ।

यहाँ मैं स्विच के साथ 30 सेकंड इंतज़ार कर रहे दो छवियों को प्रदर्शित करने के लिए स्विच के साथ आया था। आप अपने आरएफआईडी सेंसर से जो भी पढ़ते हैं उसके आधार पर छवियों को स्विच करने के लिए अपना तर्क सम्मिलित करने में सक्षम होना चाहिए।

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 एमएस प्रतीक्षा करने के लिए इसे संशोधित करने और अपनी आरएफआईडी स्थिति का परीक्षण करने में सक्षम होना चाहिए ताकि यह निर्धारित किया जा सके कि किस छवि को प्रदर्शित करना है।


यह कमाल का है। मैंने पीआईएल स्थापित किया है, अजगर-टीके पहले से ही नवीनतम संस्करण है, और मैंने उन फ़ाइलों से मिलान करने के लिए छवि फ़ाइलों का नाम बदल दिया है जिन्हें मैंने एक ही निर्देशिका में "window.py" के रूप में कॉपी किया है। जब मैं इसे पायथन के तहत चलाता हूं तो मुझे python window.pyत्रुटि मिलती है: ImportError: cannot import name ImageTk इसके माध्यम से खुदाई करके अब यह देखना है कि इसे कैसे समस्या निवारण किया जाए।
जेफ

मैंने इस लेख को संदर्भ के रूप में उपयोग करके टिक्कटर को ठीक से उपयोग करने के लिए कार्यक्रम को अपडेट किया ।
हीटफैनजॉन

मैं एक अजगर उपयोगकर्ता तो मैं संपादित का अनुमोदन करने पर पारित किया है, लेकिन किसी सुझाव नहीं कर रहा हूँ from ttk importहोना चाहिए from Tkinter.ttk import- लेकिन वह भी गलत के रूप में मुझे हमलों, मेरा अनुमान है यह होना चाहिए है from tk import, क्योंकि ऐसा करना है asTkinter के लिए।
गोल्डीलॉक्स

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.