Tkinter Struktur - Labels ohne global benutzen
Verfasst: Donnerstag 22. Oktober 2015, 12:56
Hallo zusammen, ich arbeite wieder etwas mit Tkinter und will alles perfekt von der Struktur haben und alles richtig initiieren. Habe gerade ein Problem die Labels bild_size und bild_preview zu benutzen, wenn ich global entferne sind die natürlich nicht defined, es muss ja eigentlich self.bild_size etc. heißen, dann muss aber auch bei der methoden bildinhalt_aussuchen(self) das self weitergegeben werden, wenn ich es nicht tue ist self nicht defined, aber wenn ich self bei der methode überall als argument hinzufüge verhält such das programm merkwürig, es führt beim start direkt die methode aus und zeigt mir nicht den Button.
Im Allgemeinen ist meine Struktur so in Ordnung? Und wie löse ich das best practice?
Ach und ich habe oft gelesen place() wäre nicht gut, ist das denn so eine Katastrophe? Ich habe andere Programme auf unterschiedlichen Geräten probiert mit place(), war nie ein Problem, wenn es aber der Fall ist, dass es echt crap ist, wäre eine Empfehlung gut!
Vielen Dank!
hier der Code:
Im Allgemeinen ist meine Struktur so in Ordnung? Und wie löse ich das best practice?
Ach und ich habe oft gelesen place() wäre nicht gut, ist das denn so eine Katastrophe? Ich habe andere Programme auf unterschiedlichen Geräten probiert mit place(), war nie ein Problem, wenn es aber der Fall ist, dass es echt crap ist, wäre eine Empfehlung gut!
Vielen Dank!
hier der Code:
Code: Alles auswählen
# -*- coding: utf-8 -*-
""" allgemeine Importe """
from tkFileDialog import askopenfilename, asksaveasfile
from Tkinter import Button, Frame, Tk, Label, Toplevel, Text, END, Menu, Entry, Listbox, Scrollbar, VERTICAL, RIGHT, Y
from tkMessageBox import askokcancel, showinfo, showwarning
import PIL
from PIL import Image, ImageTk
import os
import ttk
class Blog_Post_Tool(Frame):
# Variablen nur in der init initialisieren
def __init__(self, parent):
Frame.__init__(self, parent, background="white")
self.parent = parent
self.initUI()
# Hier werden alle GUI Elemente initialisiert
def initUI(self):
self.place()
""" Labels """
global bild_size
bild_size = Label(root, text = "")
bild_size.place(x = 10, y = 40)
global bild_preview
self.bild_preview = Label(root, image = None)
self.bild_preview.place(x = 10, y = 60)
""" Buttons """
self.choose_image = Button(root, text = "Bild aussuchen", bg = "LightBlue2", command=bildinhalt_aussuchen)
self.choose_image.place(x = 10, y = 10)
""" Hier beginnen die Methoden """
# Fuer das Schließen des Programms
def callback():
if askokcancel("Achtung", "Möchten Sie das Programm wirklich beenden?"):
root.destroy()
else:
return
def bildinhalt_aussuchen():
try:
""" Hier wird nach dem Bild gefragt """
pfad = askopenfilename()
""" Fuer die size """
im_for_size = Image.open(pfad)
""" Erstellt die Vorschau """
im_thumb = Image.open(pfad)
basewidth = 500
wpercent = (basewidth / float(im_thumb.size[0]))
height = int((float(im_thumb.size[1]) * float(wpercent)))
im_thumb = im_thumb.resize((basewidth, height), PIL.Image.ANTIALIAS)
photoimg = ImageTk.PhotoImage(im_thumb)
bild_preview.image = photoimg
bild_preview.config(image = photoimg)
bild_size.config(text = (str(im_for_size.size[0]) + " x " + str(im_for_size.size[1])))
except IOError:
return
if __name__ == "__main__":
root = Tk()
app = Blog_Post_Tool(root)
root.title("Branding Tool")
root.resizable(0, 0)
root.geometry('800x600')
root.protocol("WM_DELETE_WINDOW", callback)
root.mainloop()