在Tkinter画布中更改字体样式时,如果字体不是一个单词则出现错误
我有一个Toplevel()窗口,里面有一个字体列表框。当用户点击列表中的某个项目时,窗口里的画布小部件会用用户选择的字体重新写入一些文字(比如“你好,你怎么样?”)。如果字体是一个单词,这个功能运行得很好。但如果字体的名字是像“Comic Sans MS”这样的多词字体,因为它里面有空格,我就会遇到错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1486, in __call__
return self.func(*args)
File "C:\Users\Christian\Desktop\Basic Text - Copy.pyw", line 292, in changefont
canvas.create_text(150,20, fill="black", font=st + " 11 italic normal", text="Hi how are you?")
File "C:\Python27\lib\lib-tk\Tkinter.py", line 2294, in create_text
return self._create('text', args, kw)
File "C:\Python27\lib\lib-tk\Tkinter.py", line 2270, in _create
*(args + self._options(cnf, kw))))
TclError: expected integer but got "Sans"
这是我的代码:
def font(self):
font = "Arial"
style = "Regular"
fontwindow = Toplevel()
fontwindow.title("Font settings")
fontwindow.resizable(0,0)
fontfr5 = Frame(fontwindow,bd="2" ,padx=10,pady=10,width=300,height=60)
fontfr5.pack(side=LEFT)
label4= Label(fontfr5)
label4["text"]="Example: "
label4.pack(side=LEFT)
canvas = Canvas(fontfr5,bg="white",width=300,height=40)
canvas.pack(side=LEFT)
canvas.create_text(150,20, fill="black", font="Arial 11 normal", text="Hi how are you?")
def changefont(event): --Here is the function for the font change
canvas.delete(ALL)
selected = fontlist.get(fontlist.curselection())
st = "".join(selected)
findfont.delete(0,END)
findfont.insert(0,st)
canvas.create_text(150,20, fill="black", font=st + " 11 italic normal", text="Hi how are you?")
def changestyle(event):
selected = stylelist.get(stylelist.curselection())
style = selected
findstyle.delete(0,END)
findstyle.insert(0,selected)
fontlist.bind("<<ListboxSelect>>", changefont)
stylelist.bind("<<ListboxSelect>>", changestyle)
我用“".join(selected)”把多个单词连接成一个字符串,因为它们在索引里。但是,怎么才能让它适用于那些名字包含多个单词的字体呢?
1 个回答
5
使用元组
font=('Comic Sans MS', 12, 'bold italic')