クラスの使用を避けていた最初の tkinter アプリケーションのコードを書き直しています。それは行き止まりで、最終的に Python でのクラス プログラミングを学ばなければなりません。非常に奇妙なエラーが発生しましたが、修正方法がわかりません。試してみましたが、効果がありません。私がやろうとしているのは、アプリで 2 つのラベルのフォントを指定することです。以前のクラスフリーのコードではうまくいきましたが、今ではエラーが発生します:
(...) line 56, in create_widgets
TimeFont = font.Font(family='Palatino', size=88, weight='bold')
File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/tkinter/font.py", line 71, in __init__
root = tkinter._default_root
AttributeError: 'module' object has no attribute '_default_root'
ウィジェットの作成に使用している関数は次のとおりです。
def create_widgets(self):
self.set_timer = ttk.Entry(self, textvariable=self.timer)
self.start = ttk.Button(self, text='Start', command=self.start)
TimeFont = font.Font(family='Palatino', size=88, weight='bold') #the infamous line 56
self.display1 = ttk.Label(self, textvariable=self.player1, font=TimeFont)
self.display2 = ttk.Label(self, textvariable=self.player2, font=TimeFont)
関連する場合に備えて、「上から」さらにいくつかのコード:
from decimal import *
from tkinter import *
from tkinter import ttk
from tkinter import font
import time, _thread, subprocess
class Chclock(ttk.Frame):
@classmethod
def main(cls):
NoDefaultRoot()
root = Tk()
app = cls(root)
app.grid(sticky=NSEW)
root.grid_columnconfigure(0, weight=1)
root.grid_rowconfigure(0, weight=1)
root.resizable(True, False)
root.mainloop()
def __init__(self, root):
super().__init__(root)
root.bind('q', self.player1move)
root.bind('p', self.player2move)
root.bind('b', self.pause)
root.bind('a', self.undo)
root.bind('l', self.undo)
self.create_variables()
self.create_widgets() #here I call the function containing the error
self.grid_widgets()
self.grid_columnconfigure(0, weight=1)
それはおそらくばかげたことですが、何がこの問題を引き起こしているのか理解できません。以前は正常に動作していました...
ありがとう!