Seite 1 von 1

Probleme bei der Zuweisung eines tkFonts

Verfasst: Dienstag 6. August 2013, 21:56
von bestanyol
Hallo,

ich beschäftige mich seit kurzem mit Tkinter und habe eine einfache GUI zu experimentieren gebaut.
Der Fehler tritt auf, wenn ich einem Button einen Font zuweisen will, den ich vorher im Konstruktor definiert habe. Python wirft den Fehler "Attribute Error: Application has no attribute 'fon'" was ich aber nicht verstehe, da der Font eben als Klassenmember definiert ist und somit auch vorhanden sein müsste.
Über Hilfe würde ich mich sehr freuen. Der Code und der Traceback für mein Problem sind anbei.

vg,
bestanyol

Code: Alles auswählen

import Tkinter as tk
import tkFont

class Application(tk.Frame):
    
    def __init__(self,master=None):
        tk.Frame.__init__(self, master)
        self.grid(sticky=tk.N+tk.S+tk.E+tk.W)
        self.createWidgets()
        self.fon = tkFont.Font("helvetica",size=14, weight="bold")

    def createWidgets(self):
        top = self.winfo_toplevel()
        top.rowconfigure(0,weight=1)
        top.columnconfigure(0,weight=1)
        self.rowconfigure(0,weight=1)
        self.columnconfigure(0,weight=1)
        self.quitButton = tk.Button(self, text="Quit",command= self.quit,font=self.fon,relief="groove")
        self.quitButton.grid(row=0,column=0,sticky=tk.N+tk.S+tk.E+tk.W)

app = Application()
app.master.title("Sample Application")
app.mainloop()

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\...\LTk-01-simpleExample.pyw", line 24, in <module>
    app = Application()
  File "C:\...\LTk-01-simpleExample.pyw", line 12, in __init__
    self.createWidgets()
  File "C:\...\LTk-01-simpleExample.pyw", line 21, in createWidgets
    self.quitButton = tk.Button(self, text="Quit",command= self.quit,font=self.fon,relief="groove")
AttributeError: Application instance has no attribute 'fon'

Re: Probleme bei der Zuweisung eines tkFonts

Verfasst: Dienstag 6. August 2013, 22:26
von wuf
Hi bestanyol

So sollte es funktionieren:

Code: Alles auswählen

    def __init__(self,master=None):
        tk.Frame.__init__(self, master)
        self.grid(sticky=tk.N+tk.S+tk.E+tk.W)
        self.fon = tkFont.Font(family="helvetica",size=14, weight="bold")
        self.createWidgets()
Gruss wuf :wink:

Re: Probleme bei der Zuweisung eines tkFonts

Verfasst: Dienstag 6. August 2013, 22:32
von bestanyol
:shock: Da hatte ich wohl Matsch auf der Brille... es bietet sich schon an die Variable erst zu erzeugen, bevor man sie benutzt.
Vielen Dank für den Hinweis :D

vg,
bestanyol

Re: Probleme bei der Zuweisung eines tkFonts

Verfasst: Dienstag 6. August 2013, 22:59
von BlackJack
@bestanyol: Aus Gründen der Verständlichkeit könnte man das Attribut auch `font` nennen. Oder sind bei Dir die 't's irgendwie knapp? ;-)