在Tkinter画布中更改字体样式时,如果字体不是一个单词则出现错误

1 投票
1 回答
5024 浏览
提问于 2025-04-18 13:01

我有一个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')

撰写回答