Bilder und Videos in Programm einbinden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Abend! :D

Also ich habe nun endlich mein Script.Game.Interface geschrieben - funktioniert: Skript ist änderbar und Datei wird erzeugt und so. ^^
Jedenfalls also so die Grundlage.
Doch ich würde gerne Bilder bzw Videos einfügen,doch so, dass man diese nicht am PC oder Internet haben muss.
Edliche Programme die z.b. eine ".exe" sind , haben Bilder integriert, ohne, dass man sie irgendwo auf'm PC findet oder Internet braucht, also im Programm implementiert.
Weiß nur nicht wie das gehen soll?

Mit freundlichen Grüßen,
xXSkyWalkerXx1
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mit Python geht es nicht. Selbst wenn man da eine EXE erstellt mit py2exe und Co ist das immer noch ein Sack von Dateien. Meistens pyc files mit Python Code drin, aber natürlich auch alle möglichen anderen Dateien, die man braucht. Die werden dann einfach relativ zum Code abgelegt und vom Code dann einfach benutzt.

Theoretisch kannst du binäre Daten auch in ein Python Modul kodieren, und dann statt Dateien Code importieren. Wirklich dolle ist das nicht, weil man je nach GUI Library dann doch wieder eine externe Datei daraus machen muss. Ist also eher augenwischerei.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Am PC mußt Du sie so oder so haben, ob sie nun in einer ZIP-Datei gepackt sind, oder getrennt.
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Also kann ich nur Programm in ner Zip stecken (oder wo auch immer) und die Bilder/Videos ebenfalls in diese Zip.
So kann ich das Programm wenigstens verschicken.
Benutzeravatar
ThomasL
User
Beiträge: 1366
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

__deets__ hat geschrieben: Mittwoch 11. Juli 2018, 03:45Theoretisch kannst du binäre Daten auch in ein Python Modul kodieren, und dann statt Dateien Code importieren.
Nicht nur theoretisch, imho in Python wohl die einzige Möglichkeit (lasse mich gerne vom Gegenteil überzeugen).
Hier https://github.com/robertgallup/bmp2hex bmp2hex - Graphics bitmap file to C-style hex converter
hat jemand das für C-Style Code gemacht.
Kannst du eventuell so umwandeln, dass ein Python-Modul dabei rauskommt.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wieso die einzige Möglichkeit? Ich habe doch schon beschrieben, wie man es anders machen kann. Einfach Dateien daneben legen. Der TE wünscht sich (aus dem Kontext seiner anderen Posts heraus) ein stand-alone Exexcutable. Das gibt es für Python nicht. Man kann zwar allen Code und alle Daten in ein riesen Modul packen. Nur fehlt da ja dann der Interpreter. Will man sein Programm also vernünftig ausliefern, greift man eh zu einem Installer, der gleich alles mitliefert. Die einzige Alternative wäre ein statisch gelinktes EXE mit allem Python
Code und Daten darin. Aber das existiert mE nicht, und aus der Erfahrung einen Python Interpreter eingebettet an unsere Kunden auszuliefern kann ich auch nur davon abraten, das basteln zu wollen. Den TE überfordert es allemal.
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Ich denke mal, ich werds halt einfach machen: Programm in eine ZIP packen und in der gleichen ZIP die ganzen Bilder/Videos.
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Manche GUI-Toolkits können auch Bilder in Formaten wie X PixMaps direkt aus dem Programm ”konsumieren”. Hier ein Beispiel das ich neulich in einem anderen Forum gepostet hatte (eine Portierung eines C++-Beispielprogramms für FLTK nach Python und Qt4):

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf-8
from __future__ import absolute_import, division, print_function
import sys
from PyQt4 import uic
from PyQt4.QtCore import QSize
from PyQt4.QtGui import (
    QApplication, QIcon, QListWidgetItem, QMessageBox, QPixmap,
)

CAT_XPM = [
    '50 34 4 1',
    '  c black',
    'o c #ff9900',
    '@ c #ffffff',
    '# c None',
    '##################################################',
    '###      ##############################       ####',
    '### ooooo  ###########################  ooooo ####',
    '### oo  oo  #########################  oo  oo ####',
    '### oo   oo  #######################  oo   oo ####',
    '### oo    oo  #####################  oo    oo ####',
    '### oo     oo  ###################  oo     oo ####',
    '### oo      oo                     oo      oo ####',
    '### oo       oo  ooooooooooooooo  oo       oo ####',
    '### oo        ooooooooooooooooooooo        oo ####',
    '### oo     ooooooooooooooooooooooooooo    ooo ####',
    '#### oo   ooooooo ooooooooooooo ooooooo   oo #####',
    '####  oo oooooooo ooooooooooooo oooooooo oo  #####',
    '##### oo oooooooo ooooooooooooo oooooooo oo ######',
    '#####  o ooooooooooooooooooooooooooooooo o  ######',
    '###### ooooooooooooooooooooooooooooooooooo #######',
    '##### ooooooooo     ooooooooo     ooooooooo ######',
    '##### oooooooo  @@@  ooooooo  @@@  oooooooo ######',
    '##### oooooooo @@@@@ ooooooo @@@@@ oooooooo ######',
    '##### oooooooo @@@@@ ooooooo @@@@@ oooooooo ######',
    '##### oooooooo  @@@  ooooooo  @@@  oooooooo ######',
    '##### ooooooooo     ooooooooo     ooooooooo ######',
    '###### oooooooooooooo       oooooooooooooo #######',
    '###### oooooooo@@@@@@@     @@@@@@@oooooooo #######',
    '###### ooooooo@@@@@@@@@   @@@@@@@@@ooooooo #######',
    '####### ooooo@@@@@@@@@@@ @@@@@@@@@@@ooooo ########',
    '######### oo@@@@@@@@@@@@ @@@@@@@@@@@@oo ##########',
    '########## o@@@@@@ @@@@@ @@@@@ @@@@@@o ###########',
    '########### @@@@@@@     @     @@@@@@@ ############',
    '############  @@@@@@@@@@@@@@@@@@@@@  #############',
    '##############  @@@@@@@@@@@@@@@@@  ###############',
    '################    @@@@@@@@@    #################',
    '####################         #####################',
    '##################################################',
]


def main():
    application = QApplication(sys.argv)
    window = uic.loadUi('test.ui')
    
    cat_pixmap = QPixmap(CAT_XPM)
    # Leave some space for text under the item.
    size = cat_pixmap.size() + QSize(0, 20)
    window.thumbnails.setIconSize(size)
    window.thumbnails.setGridSize(size + QSize(30, 30))
    
    cat_icon = QIcon(cat_pixmap)
    for i in xrange(40):
        QListWidgetItem(cat_icon, format(i, '04d'), window.thumbnails)
    
    window.thumbnails.itemClicked.connect(
        lambda item: QMessageBox.information(
            window,
            'Title',
            "Thumbnail '{}' clicked.".format(item.text()),
        )
    )
    window.show()
    sys.exit(application.exec_())


if __name__ == '__main__':
    main()
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na da ginge bestimmt auch ein kodiertes PNG in tkinter - dank StringIO. Aber wollen wenn man eh viele Dateien distributieren muss tät ich’s nicht.
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@__deets__: Nö, wollen würde ich das auch nicht. :-) `StringIO` braucht man auch gar nicht, die Bilderklassen in `Tkinter` kennen ein `data`-Schlüsselwortargument bei dem man direkt die Binärdaten übergeben kann. Und die kann man beispielsweise Base64-kodiert als Konstanten in den Quelltext schreiben (lassen). Das hat wuf schon bei einigen seiner Beispiele hier im Forum so gemacht um komplette Beispiele zu haben ohne das man noch Bilder irgendwo hinterlegen/runterladen muss.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Und wie siehts nun eigentlich mit'n einbetten von Videos aus?
Also mit Videos aus meiner Festplatte.
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@xXSkyWalkerXx1: Wäre der erste Schritt nicht erst einmal abspielen, bevor Du ans einbetten denkst?
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Aber um ein Video abspielen zu können (als Nutzer des Programmes, nicht als Programmierer), muss einem das Video nicht erstmal angezeigt werden? :D
Damit man es überhaupt abspielen kann.
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Häh?
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Naja, ich möchte ja Videos in meinem Programm haben bzw anzeigen.
Du hast gesagt, dass man es erstmal abspielen muss anstatt erst einzubetten: "Wäre der erste Schritt nicht erst einmal abspielen, bevor Du ans einbetten denkst?"
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ja genau, und Deine Antwort darauf verstehe ich nicht. Solange Du das Video in Deinem Programm nicht abspielen kannst, macht es wenig Sinn darüber nachzudenken ob und wie man die Datei einbetten kann.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Achsoo... Okey, hättest vllt genauer formulieren sollen. ^^
Naja, abgespielt sollte es eigentlich per Mausklick auf's Video bzw Thumbnail - was auch immer richtig wäre.
Z.B. wenn man YouTube Videos in einem Forumpost einbettet, da klickt man ja auch bloß aufs Video.
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Und wie machst Du das?
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Das weiß ich eben nicht.
Kannst du es vllt erklären, wie ich das Ziel erreichen kann?
Heißt jetzt nicht unbedingt fertigen Code, aber so schritte/Erklärung wie ich zum Ziel komme, wäre sehr gut und nett.
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Also, das hier wäreso ein Beispiel, wie es aussehen soll:

Code: Alles auswählen

import tkinter, os

main = tkinter.Tk()
main.geometry("500x304")
main.title("Video Player - Test")

def playVideo1():
    os.system("/media/pi/DISK_IMG/Filme/Zombieland.mp4")

canvas = tkinter.Canvas(main,background="black")
canvas.pack(side="top")
playBTN = tkinter.Button(main, text="Play Video",command=playVideo1)
playBTN.place(x=250,y=300,anchor="s")
Da, wo die schwarze Leinwand (Canvas) ist, da soll das Video abgespielt werden.
Hätte es zwar gern, dass man wie bei YouTube bloß auf das Video klicken muss, aber glaube mit Button ist es vllt einfacher - weiß nicht?
Wie lasse ich nun da ein Video abspielen und wie ein Bild?

PS. mit PhotoImage kommt immer ein Fehler mit "couldn't recognized data in image" oder so ähnlich.
Antworten