Probleme mit Python-Version und tkinter

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.
Antworten
Python1906
User
Beiträge: 29
Registriert: Mittwoch 9. November 2016, 13:52

Montag 24. Juli 2017, 20:19

Hallo Leute,

ich versuche derzeit weiterhin ein bisschen mit Pypng herum zu spielen und möchte dabei eine grafische Oberfläche mit tkinter programmieren.
Jedoch sind die Versionen dabei unterschiedlich:
tkinter: Python 3
Pypng: Python 2.7

Ich habe auch schon nach Pypng für Python 3 und tkinter für Python 2.7 gesucht, aber keine richtige Version gefunden.

Somit habe ich mir gedacht, dass ich die Funktionen (die mit Pypng laufen und von Buttons (tkinter) aufgerufen werden sollen) beim tkinterskript mit subprocess.call in der Pypng-Datei ausführe. Dann die Informationen auswerte (von der Pypng-Datei) und die Informationen, welche zurückgeliefert werden sollen in der Datei information.tmp geschrieben werden sollen. Anschließend werden diese vom tkinterskript ausgelesen und ausgewertet.

*tkinterskript = die Datei, welche die grafische Oberfläche anbietet
*Pypng-Datei = die Datei, welche das Bild bearbeitet
*information.tmp = tempöräre Datei, welche zur Interaktion zwischen den beiden Dateien dient
Ich weiß, dass dieser Lösungsansatz nicht empfehlenswert ist, weshalb ich fragen wollte, ob jemand eine bessere Idee hat.


Mein zweites Problem ist, dass ich versucht habe mit

Code: Alles auswählen

file = filedialog.askopenfilename(filetypes=(("PNG - Files", "*.png;*.PNG"),
                                                 ("All Files", "*.*") #
                                                )
                                     )
eine Datei zu öffnen, jedoch soll dies einschließlich png-Dateien erlauben. Ich habe im Internet gelesen, dass ich bei filetypes angeben kann welche Dateitypen erlaubt sind. So das Problem ist, eigentlich müsste ich die Zeile (#) löschen, damit es funktioniert. Jedoch gibt er mir dann folgende Fehlermeldung:


Traceback (most recent call last):
File "/home/julien/Schreibtisch/Programmieren/Python/Bilder/PixelChanger/Pixelchanger01.py", line 16, in <module>
file = filedialog.askopenfilename(filetypes=(("PNG - Files", "*.png;*.PNG")#,
File "/usr/lib/python3.5/tkinter/filedialog.py", line 375, in askopenfilename
return Open(**options).show()
File "/usr/lib/python3.5/tkinter/commondialog.py", line 48, in show
s = w.tk.call(self.command, *w._options(self.options))
_tkinter.TclError: bad file type "*.png;*.PNG", should be "typeName {extension ?extensions ...?} ?{macType ?macTypes ...?}?"


Wenn ich diese Zeile weiderum nicht entferne, dann funktioniert es. Ich muss zwar immer auf "All Files" klicken, damit es funktioniert, aber es ist nicht so wie es soll.

Ich hoffe jemand kann mir weiterhelfen
__deets__
User
Beiträge: 3308
Registriert: Mittwoch 14. Oktober 2015, 14:29

Montag 24. Juli 2017, 20:30

Natürlich gibt es tkinter für Python 2 und 3. Es wird einmal Tkinter ud einmal tkinter geschrieben, ist sonst aber nahezu baugleich.
BlackJack

Montag 24. Juli 2017, 20:41

@Python1906: So wie der `askopenfilename()`-Aufruf dort steht funktioniert er. Wenn Du nur ein Tupel mit Beschriftung und Dateiendungen dort hinschreibst, musst Du aufpassen das das noch einmal in einem Tupel steht — das Komma macht das Tupel, nicht die Klammern!
Python1906
User
Beiträge: 29
Registriert: Mittwoch 9. November 2016, 13:52

Dienstag 25. Juli 2017, 00:09

Hey Danke für eure Hilfe!

@Black Jack:
So nun funktioniert es, fast.

Trotzdem habe ich immer noch das Problem mit den Png-Dateien.
Denn wenn ich das Programms starte zeigt es mir egal, wo ich bin, nur Ordner und somit keine einzige Dateien.
Jedoch soll er mir die PNG-Dateien anzeigen.

Könnt ihr mir auch dort eventuell behilflich sein? :D
BlackJack

Dienstag 25. Juli 2017, 00:31

@Python1906: Also ich bekomme Ordner und PNG-Dateien angezeigt. :K
Python1906
User
Beiträge: 29
Registriert: Mittwoch 9. November 2016, 13:52

Dienstag 25. Juli 2017, 09:13

ok, denn das ist komisch. Bei mir funktioniert es nämlich nicht
Python1906
User
Beiträge: 29
Registriert: Mittwoch 9. November 2016, 13:52

Dienstag 25. Juli 2017, 18:59

Haben Sie denn eine Idee, wich Ihnen die Programmausgabe, die bei meinem Rechner läuft, zeigen kann, denn bei mir funktioniert es nicht.
Vielleicht liegt es ja am Code, was ich aber nicht glaube:

Code: Alles auswählen

import tkFileDialog
import subprocess


 file = tkFileDialog.askopenfilename(filetypes=(("PNG - Files", "*.png;*.PNG"),
                                                                    ("PNG - Files", "*.png;*.PNG")
                                                                    )
                                                    )
print(file)
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Dienstag 25. Juli 2017, 19:51

Mit PyPNG hatte ich noch nichts zu tun, mit tkFileDialog auch noch nichts, welche Version Du nun benutzt, habe ich nicht wirklich verstanden, nur was Tkinter betrifft, sieht es in einem funktionierenden Beispiel bei mir so aus.

Code: Alles auswählen

from tkinter import Tk, Button
from tkinter.filedialog import askopenfilename

def waehle_datei():
    dateiname = askopenfilename(filetypes=(
                ("PNG - Files", "*.png;*.PNG"),
                ("All Files", "*.*"))
                )           
    if dateiname != "":
        print(dateiname)

fenster = Tk()             
Button(fenster, text = "Test", command = waehle_datei).pack()
fenster.mainloop()
Python1906
User
Beiträge: 29
Registriert: Mittwoch 9. November 2016, 13:52

Dienstag 25. Juli 2017, 22:53

Danke für dieses Beispiel.

Doch auch hierbei habe ich dieses Problem.

Wenn ich auf PNG-Dateien einstelle, dann kann ich nur Ordner öffnen, keine Dateien.

Wenn ich wiederum auf Alle Dateien gehe, dann kann ich alles ganz normal öffnen auch PNG-Dateien.
Melewo
User
Beiträge: 320
Registriert: Mittwoch 3. Mai 2017, 16:30

Mittwoch 26. Juli 2017, 06:20

Du könntest noch andere Schreibweisen probieren, wobei ich mir nicht vorstellen kann, dass es daran liegen könnte.

Code: Alles auswählen

    dateiname = askopenfilename(filetypes=[
                ("PNG - Files", "*.png;*.PNG"),
                ("All Files", "*.*")]
                )
BlackJack

Mittwoch 26. Juli 2017, 10:46

Ich habe mal in die Tk-Dokumentation geschaut und da steht das das in den Dateiendungen gar keine ”Wildcards” vorkommen dürfen, ausser genau *einem* Sternchnen das für „alle Dateien“ steht, und dort werden mehrere Endungen durch ein Leerzeichen getrennt.
Antworten