Probleme bei der Zuweisung eines tkFonts

Fragen zu Tkinter.
Antworten
bestanyol
User
Beiträge: 2
Registriert: Dienstag 6. August 2013, 21:45

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'
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

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:
Take it easy Mates!
bestanyol
User
Beiträge: 2
Registriert: Dienstag 6. August 2013, 21:45

: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
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? ;-)
Antworten