Ich habe das Gefühl, dass dies in einem facepalm enden wird, aber ich kann nur nicht herausfinden, warum dieses import x from y
Szenario für mich nicht funktioniert. Als Ausgangspunkt nehmen Sie das folgende Modul main.py
:Kann Tkinter Font-Objekt nicht von Modul
import Tkinter as tk
import tkFont
__metaclass__ = type
#Create widgets
root = tk.Tk()
fntPlainText = tkFont.Font(family='Courier New',size=10)
lblDisplay = tk.Label(root, relief=tk.SUNKEN,
font=fntPlainText,
width=30,height=5,
text='This is a test!')
#Do layout
lblDisplay.grid(padx=5,pady=5)
#Begin app
tk.mainloop()
Dies läuft normal und legt ein kleines Label mit dem erwarteten Inhalt auf:
So, jetzt möchte ich die Definition von bewegen Diese Font
Objekt zu einem separaten Modul, so kann ich es unter mehreren Anwendungen teilen. Meine aktualisierten Code-Module sind fonts1.py
:
import Tkinter as tk
import tkFont
__metaclass__ = type
fntPlainText = tkFont.Font(family='Courier New',size=10)
... und main1.py
:
import Tkinter as tk
from fonts1 import fntPlainText
__metaclass__ = type
#Create widgets
root = tk.Tk()
lblDisplay = tk.Label(root, relief=tk.SUNKEN,
font=fntPlainText,
width=30,height=5,
text='This is a test!')
#Do layout
lblDisplay.grid(padx=5,pady=5)
#Begin app
tk.mainloop()
Aber wenn ich main1.py
laufen, erhalte ich eine Zurückverfolgungs:
Traceback (most recent call last):
File "G:\Python\experiments\investigations\tk\main1.py", line 2, in <module>
from fonts1 import fntPlainText
File "G:\Python\experiments\investigations\tk\fonts1.py", line 5, in <module>
fntPlainText = tkFont.Font(family='Courier New',size=10)
File "C:\Python27\lib\lib-tk\tkFont.py", line 89, in __init__
tk.call("font", "create", self.name, *font)
AttributeError: 'NoneType' object has no attribute 'call'
Von googeln und Experimentieren, Ich habe genug gefunden, um zu wissen, dass etwas mit der Zuweisung von fntPlainText
schief läuft, aber (wieder) kann ich nicht herausfinden, was es ist. Das größte Puzzle der ganzen Situation ist, dass, wenn ich fonts1.py
einfach abspecken zu fntPlainText
als
Modified fonts1.py
tuple-- zu definieren:
fntPlainText = ('Courier New',10)
Laufe main1.py
jetzt abgeschlossen normal und malt das gleiche Fenster wie main.py
.
Wenn es darauf ankommt, ist die Umgebung Python 2.7.x unter Windows 7.
Es klingt wie Sie versuchen, die Schriftart vor dem Erstellen des Stammfensters zu erstellen. –
Ja, das ist es. Kommentar unten zu Matt erklärt, was mich abgeworfen hat. – JDM