tkinter + base64 - problem

Fragen zu Tkinter.
Antworten
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

Hi Leute,

ich habe ein base64 Converter programmiert aber,
mit dem base64 funktioniert das bei Python 3.x nicht.

Könnt ihr mir bitte helfen?

Mein Programm:

Code: Alles auswählen

# -*- coding: UTF-8 -*-
from tkinter import ttk
from tkinter import*
import tkinter
import base64
import tkinter.filedialog

style = ttk.Style()
style.theme_use('xpnative')
root.attributes('-toolwindow', True)                              
root.title("base64 Converter")
root.geometry('560x200')

def ask_quit():
    root.destroy()
    root.mainloop()
    
def pfadopen():

    pfad = tkinter.filedialog.askopenfilename(filetypes=[("Alle Images", ".jpg .jpeg .gif .png"),("JPG Files", ".jpg"),("JPEG Files", ".jpeg")])
    print (pfad)
    f = open(pfad, 'rb')
    data = f.read()
    ausgabe=data.encode('base64')
    f.close()
    ausgabe = f
    etext.insert("end",ausgabe)


scrollbar = ttk.Scrollbar(root)
scrollbar.place(relx=0.958, rely=0.04, relheight=0.55)
text = Text(root,yscrollcommand=scrollbar.set)
scrollbar.config(command=text.yview)
text.config(font =("Arial", 11))  
text.insert(INSERT, r"")
text.place(relx=0.01, rely=0.04, relwidth=0.95, relheight=0.55)


pfad1 = ttk.Button(root, text = "Pfad öffnen", command = pfadopen)
pfad1.place(relx=0.01, rely=0.7, relwidth=0.2, relheight=0.2)

exitwindow = ttk.Button(root, text = "Beenden", command = ask_quit)
exitwindow.place(relx=0.3, rely=0.7, relwidth=0.2, relheight=0.2)

root.mainloop()
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

Kann mir niemand helfen? :( :( :( :!: :idea: :K
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hi jtschoch

Wir versuchen doch immer zu helfen. Kannst du das folgende einmal ausprobieren:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: UTF-8 -*-


from tkinter import*
from tkinter import ttk
import tkinter
import base64
import tkinter.filedialog

root = Tk()

style = ttk.Style()
#style.theme_use('xpnative')
#root.attributes('-toolwindow', True)                              
root.title("base64 Converter")
root.geometry('600x400')


def ask_quit():
    root.destroy()
    root.mainloop()
   
def pfadopen():

    pfad = tkinter.filedialog.askopenfilename(filetypes=[("Alle Images",
        ".jpg .jpeg .gif .png"),("JPG Files", ".jpg"),("JPEG Files", ".jpeg")])
    print (pfad)
    
    with open(pfad, 'rb') as f:
        data = f.read()
        ausgabe = base64.encodebytes(data)
        
    text.insert("end",ausgabe)
    image_label.imported_image = PhotoImage(data=ausgabe)
    image_label.config(image=image_label.imported_image) 
    
scrollbar = ttk.Scrollbar(root)
scrollbar.place(relx=0.958, rely=0.04, relheight=0.55)

text = Text(root, yscrollcommand=scrollbar.set, bg='white', fg='darkolivegreen',
    padx=5, pady=5, font=("Monospace", -12, "normal"))
    
scrollbar.config(command=text.yview)

text.insert(INSERT, r"")
text.place(relx=0.01, rely=0.04, relwidth=0.95, relheight=0.55)

pfad1 = ttk.Button(root, text = "Pfad öffnen", command = pfadopen)
pfad1.place(relx=0.01, rely=0.7, relwidth=0.2, relheight=0.2)

exitwindow = ttk.Button(root, text = "Beenden", command = ask_quit)
exitwindow.place(relx=0.3, rely=0.7, relwidth=0.2, relheight=0.2)

image_label = ttk.Label(root, relief='sunken', anchor='center')
image_label.place(relx=0.6, rely=0.7, relwidth=0.2, relheight=0.2)
image_label.imported_image = None

root.mainloop()
Ist es dir noch nicht verleidet mit dem Place-Layout-Manger zu arbeiten?

Gruß wuf :wink:
Take it easy Mates!
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

Vielen Dank!
SO wollte ich das haben, ich hatte mit base64 alles versucht aber nichts hat geglappt.
Aber mit der Vorschau glappt nicht richtig, weil es nicht alle Formate unterstützt!
----------------
Achso mit dem
Ist es dir noch nicht verleidet mit dem Place-Layout-Manger zu arbeiten?
Ich habe es mir so schon angewönt mit pack und gird komme ich nicht so richtig klar.
Hier kann ich besser die Position bestimmen.
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
BlackJack

@jtschoch: Solange Du keine Programme schreibst die jemand anderes benutzen möchte — aber spätestens dann ist `place()` einfach nicht mehr praktikabel. Eben weil Du die Positionen bestimmst, funktioniert das nur solange alle Rahmenbedingungen wie Bildschirmauflösung, Schriftgrössen, Fenstersystem, und so weiter, denen *Deines* Rechners entsprechen.
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

Bild

So sieht es jetzt aus!

Aber fält euch was auf? Es wird nur ein Teil des Bildes angezeigt.
Wie kann ich das ändern das die Bilder vollständig in den Kasten angezeigt werden?

----------------
Achso blos einwas stört mich bei Place() das Die Buttons so groß werden!

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from tkinter import*
from tkinter import ttk
import tkinter
import base64
import tkinter.filedialog

root = Tk()

style = ttk.Style()
#style.theme_use('xpnative')
#root.attributes('-toolwindow', True)                              
root.title("base64 Converter")
#root.geometry('600x400')
root.geometry('560x200')

def ask_quit():
    root.destroy()
    root.mainloop()
   
def pfadopen():

    pfad = tkinter.filedialog.askopenfilename(filetypes=[("Alle Images",
                                                          ".jpg .jpeg .bmp .ico .gif .raw .png"),
                                                         ("JPG JPEG File Interchange Format", ".jpg .jpeg"),
                                                         ("Windows Bitmap", ".bmp"),
                                                         ("Gimp\Windows Icon", ".ico"),
                                                         ("Portable Network Graphics", ".png"),
                                                         ("RAW Graphics Format/ Rohdatenformat", ".raw"),
                                                         ("Graphics Interchange Format", ".gif"),
                                                         ("other", "*.*")])

    try:
        
        with open(pfad, 'rb') as f:
            data = f.read()
            ausgabe = base64.encodebytes(data)
    except:
        ausgabe = " ***Kein Bild ausgewählt***"
    try:    
        text.insert("end",ausgabe)
        image_label.imported_image = PhotoImage(data=ausgabe)
        image_label.config(image=image_label.imported_image) 
    except:
        text.insert("end",ausgabe)
        image_label.config(text = " Keine Vorschau\n verfügbar",
                           font=("Monospace", -16, "bold")) 

scrollbar = ttk.Scrollbar(root)
scrollbar.place(relx=0.578, rely=0.04, relheight=0.55)

text = Text(root, yscrollcommand=scrollbar.set, bg='white', fg='darkolivegreen',
    padx=5, pady=5, font=("Monospace", -12, "normal"))
    
scrollbar.config(command=text.yview)

text.insert(INSERT, r"")
text.place(relx=0.01, rely=0.04, relwidth=0.57, relheight=0.55)

pfad1 = ttk.Button(root, text = "Pfad öffnen", command = pfadopen)
pfad1.place(relx=0.01, rely=0.7, relwidth=0.2, relheight=0.2)

exitwindow = ttk.Button(root, text = "Beenden", command = ask_quit)
exitwindow.place(relx=0.3, rely=0.7, relwidth=0.2, relheight=0.2)

image_label = ttk.Label(root, relief='sunken', anchor='center')
image_label.place(relx=0.68, rely=0.04, relwidth=0.3, relheight=0.9)
image_label.imported_image = None

ttk.Sizegrip(root).place(relx=0.969, rely=0.92)

    
root.mainloop()
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Sag mal hat das Forum irgendwie einen sehr wichtigen Platz in deinem Kopf übernommen? Entweder du skalierst das Bild oder du machst dein Anzeigefenster größer. Es ist doch dein Programm, dann solltest du auch Wissen wie es letztendlich aussehen soll; z.B. deine Buttons, wenn diese ihre Größe nicht ändern sollen dann lass doch die relativen Größenangaben weg. Weißt du überhaupt auch nur ansatzweise was du hier manchmal für Fragen stellst? (und dann auch noch die Antworten ignorierst, solange nicht die vollständige Lösung drin steht)
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

Ich möchte es ja skalieren, aber ich weiß nicht wie das geht.
Ich habe auch schon unter den Suchbegriff: python photoImage skalieren geschaut, aber nicht das Richtige!
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Und nochmal: Schau dir endlich die PIL an.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

ja, aber mein Python 27 ist halb kaputt besser gesagt es ist nichtmer da!
Habe ich mir schon angeschaut
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Newcomer
User
Beiträge: 131
Registriert: Sonntag 15. Mai 2011, 20:41

das passt jetzt zwar nicht zum Thema, aber ich find python 3.2 am besten ;DDDDDDD

Edit: Wow du schreibst ca. zwei beiträge am tag
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

jtschoch hat geschrieben:ja, aber mein Python 27 ist halb kaputt besser gesagt es ist nichtmer da!
Das ist ja nicht unser Problem ;-) Vielleicht solltst du das erstmal reparieren.
Das Leben ist wie ein Tennisball.
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

Habe ich schon getan
-----------------

Ich möchte das Bild skalieren, also sozusagen ein thumbnail.
Habe nur bei Pil habe ich was gefunden:
http://www.pythonware.com/library/pil/h ... /image.htm
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

ja aber jetzt kommt das Problem:

Ich muss mein Prog. in 2.7 schreiben und da weiß ich das wieder nicht wie das mit den base64 ist und Pil hat auch ein Prob.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from Tkinter import* 
import Tkinter, ttk
import base64
import tkFileDialog
from PIL import Image
import os

root = Tk()

style = ttk.Style()
#style.theme_use('xpnative')
#root.attributes('-toolwindow', True)                              
root.title("base64 Converter")
#root.geometry('600x400')
root.geometry('560x200')

def ask_quit():
    root.destroy()
    root.mainloop()
   
def pfadopen():

    pfad = tkFileDialog.askopenfilename(filetypes=[("Alle Images",
                                                    ".jpg .jpeg .bmp .ico .gif .raw .png"),
                                                    ("JPG JPEG File Interchange Format", ".jpg .jpeg"),
                                                    ("Windows Bitmap", ".bmp"),
                                                    ("Gimp\Windows Icon", ".ico"),
                                                    ("Portable Network Graphics", ".png"),
                                                    ("RAW Graphics Format/ Rohdatenformat", ".raw"),
                                                    ("Graphics Interchange Format", ".gif"),
                                                    ("other", "*.*")])

    try:
        
        with open(pfad, 'rb') as f:
            data = f.read()
            #ausgabe = base64.encode(data)
            ausgabe = data
    except:
        ausgabe = " ***Kein Bild ausgewählt***"
    #try:
    size = 128, 128
    text.insert("end",ausgabe)
    image_label.imported_image = Image.open(ausgabe)
    image_label.imported_image.thumbnail(size, Image.ANTIALIAS)
    image_label.config(image=image_label.imported_image) 
    #except:
        #text.insert("end",ausgabe)
        #image_label.config(text = " Keine Vorschau\n verfügbar",
                           #font=("Monospace", -16, "bold")) 

scrollbar = ttk.Scrollbar(root)
scrollbar.place(relx=0.578, rely=0.04, relheight=0.55)

text = Text(root, yscrollcommand=scrollbar.set, bg='white', fg='darkolivegreen',
    padx=5, pady=5, font=("Monospace", -12, "normal"))
    
scrollbar.config(command=text.yview)

text.insert(INSERT, r"")
text.place(relx=0.01, rely=0.04, relwidth=0.57, relheight=0.55)

pfad1 = ttk.Button(root, text = "Pfad öffnen", command = pfadopen)
pfad1.place(relx=0.01, rely=0.7, relwidth=0.2, relheight=0.2)

exitwindow = ttk.Button(root, text = "Beenden", command = ask_quit)
exitwindow.place(relx=0.3, rely=0.7, relwidth=0.2, relheight=0.2)

image_label = ttk.Label(root, relief='sunken', anchor='center')
image_label.place(relx=0.68, rely=0.04, relwidth=0.3, relheight=0.9)
image_label.imported_image = None

ttk.Sizegrip(root).place(relx=0.969, rely=0.92)

    
root.mainloop()
Und noch was:
wie kann ich das machen das das Prog. immer den alten text überschreibt und nicht hinten dran hängt.
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

Kann mir bitte jemand helfen :?: :roll: :( :( :( :( :( :( :arrow: no :idea:
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Benutzeravatar
jtschoch
User
Beiträge: 400
Registriert: Freitag 6. Mai 2011, 15:40
Kontaktdaten:

Ja, ich habe das hinbekommen, aber
ich wollte das Bild mit thumbnail kleiner machen aber da bekomme ich eine Fehlermeldung:

Code: Alles auswählen

<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=128x91 at 0x1697418>

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1410, in __call__
    return self.func(*args)
  File "J:\JT_proj\python\base64\mybase642.py", line 50, in pfadopen
    image_label.config(image=image_label.imported_image)
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1202, in configure
    return self._configure('configure', cnf, kw)
  File "C:\Python27\lib\lib-tk\Tkinter.py", line 1193, in _configure
    self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
TclError: image specification must contain an odd number of elements
Meine code Hier
Meine Webseite http://www.develos.de
Forum: http://www.develos.de/forum
Mein Minecraft-Server: jonel.minecraft.to [dynmap(:8123)] | Webseite: http://jonel-minecraft.tk
Antworten