当字体不是一个单词python Tkinter时,在画布中更改字体样式会给我一个错误

当字体不是一个单词python Tkinter时,在画布中更改字体样式会给我一个错误,python,canvas,fonts,listbox,tkinter,Python,Canvas,Fonts,Listbox,Tkinter,我有一个Toplevel()窗口,它有一个字体列表框小部件,一旦用户单击列表中的一个项目,同一窗口中的画布小部件就会用用户选择的字体重写其中的单词(您好吗?)。如果字体为一个单词,则效果良好。但是如果字体是一种类似于(Comic Sans MS)的字体,那么它有空格,我会得到一个错误: 以下是错误: Exception in Tkinter callback Traceback (most recent call last): File "C:\Python27\lib\lib-tk\Tkint

我有一个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)
def字体(self):
font=“Arial”
style=“常规”
fontwindow=Toplevel()
fontwindow.title(“字体设置”)
fontwindow.可调整大小(0,0)
fontfr5=框架(fontwindow,bd=“2”,padx=10,pady=10,宽度=300,高度=60)
fontfr5.组件(侧面=左侧)
标签4=标签(fontfr5)
label4[“文本”]=“示例:”
标签4.包装(侧面=左侧)
画布=画布(fontfr5,bg=“白色”,宽度=300,高度=40)
canvas.pack(侧面=左侧)
画布。创建文本(150,20,fill=“black”,font=“Arial 11 normal”,text=“你好吗?”)
def changefont(事件):--下面是字体更改的函数
canvas.delete(全部)
selected=fontlist.get(fontlist.curselection())
st=”“.加入(选定)
findfont.delete(0,结束)
findfont.insert(0,st)
画布。创建文本(150,20,fill=“black”,font=st+“11斜体法线”,text=“你好吗?”)
def changestyle(事件):
selected=stylelist.get(stylelist.curselection())
样式=选定
findstyle.delete(0,结束)
findstyle.insert(0,选中)
fontlist.bind(“,changefont)
stylelist.bind(“,changestyle)
我使用了“.join(selected)”将它连接到一个字符串中,如果它是多个单词,因为它位于索引中。但是我如何才能让它与不止一个单词的字体配合使用呢

font=('Comic Sans MS', 12, 'bold italic')

否用户从列表中选择一种字体,然后函数使用该字体。因此,如果字体中有空格,则无法使用。我就是不知道怎么修。你试过我的答案了吗?因为我知道。我已经修改了你所说的,以适应我的需要,它的工作!谢谢这是如何使用名称中带有空格的字体的最短示例。我们并不总是使用OP代码来显示解决方案。有时,我们创建自己的完整工作示例,但只使用更重要的元素:)