2015-02-06 8 views
0

최근 GUI 파이썬 일반 텍스트 편집기에서 작업했습니다.파이썬에서 동적으로 글꼴을 변경할 수 없습니다. Tkinter 텍스트 편집기

def TimesNewRoman(): 
    global fontname 
    global font 
    fontname = "Times New Roman" 
    print font 

변수는 다음과 같습니다 : 코드는이 함수를 호출

fontname = "Calibri" 
size = "14" 
font = fontname + " " + size 

그리고 Tkinter의 코드와 글꼴을 읽

textPad.config(
    borderwidth=0, 
    font=font , 
    foreground="green", 
    background="black", 
    insertbackground="white", # cursor 
    selectforeground="blue", # selection 
    selectbackground="#008000", 
    wrap="word", 
    width=64, 
    undo=True, # Tk 8.4 
    ) 

을하지만, 나는 그것이 동작하지 않습니다. 오류는 없지만 글꼴은 Calibri로 유지됩니다. 인터넷을 검색하여 텍스트 캔버스의 글꼴을 동적으로 변경할 수있는 항목을 찾고 있지만 작동하는 글꼴을 찾지 못했습니다. 글꼴 수정 기능을 구현하는 데 도움을 주시면 매우 감사하겠습니다.

나는 파이썬 2.7.7, Tkinter를 사용하고, 나는

+0

코드가 작동합니다. 'Configuration'>'Change Font' 메뉴로가시겠습니까? – nbro

+0

코드를 게시 할 때 문제를 재현 할 수있는 한 최대한 많은 코드를 제거하는 것이 가장 좋습니다. 문제를 재현하기 위해 잘라 내기, 복사,지나 가기, 찾기, 실행 취소 등의 기능이 필요하지 않습니다. 당신이 할 수있는 모든 것을 제거했다면 당신의 질문은 더 좋을 것입니다. 당신이 묘사하는 행동을 가진 실행 가능한 프로그램을 떠나야합니다. –

+0

"Times New Roman"으로 글꼴을 변경하려는 위치에 게시 한 코드 어디에도 표시되지 않습니다. –

답변

1

당신의 기능 "Times New Roman"에 글꼴 이름을 변경해야합니다 윈도우 7에서이 작업을 실행하고 있습니다. 이 함수를 호출하고 있습니까?

Bryan Oakley 명시된 바와 같이, 두 개 이상의 단어로 글꼴 이름을 지정할 때 튜플 구문을 사용해야합니다 (아래 예에서와 같이).

동적으로 버튼의 클릭으로 Text 위젯의 글꼴을 변경 할 수있는 상태인지, 그 다음은 사용자가 글꼴 및 크기 쓸 수하는 Toplevel 위젯을 사용하는 간단한 해결책이 될 수있다 :

import Tkinter as tk 


def choose_font(): 
    global m, text # I hate to use global, but for simplicity 

    t = tk.Toplevel(m) 
    font_name = tk.Label(t, text='Font Name: ') 
    font_name.grid(row=0, column=0, sticky='nsew') 
    enter_font = tk.Entry(t) 
    enter_font.grid(row=0, column=1, sticky='nsew') 
    font_size = tk.Label(t, text='Font Size: ') 
    font_size.grid(row=1, column=0, sticky='nsew') 
    enter_size = tk.Entry(t) 
    enter_size.grid(row=1, column=1, sticky='nsew') 

    # associating a lambda with the call to text.config() 
    # to change the font of text (a Text widget reference) 
    ok_btn = tk.Button(t, text='Apply Changes', 
         command=lambda: text.config(font=(enter_font.get(), 
         enter_size.get()))) 
    ok_btn.grid(row=2, column=1, sticky='nsew') 

    # just to make strechable widgets 
    # you don't strictly need this 
    for i in range(2): 
     t.grid_rowconfigure(i, weight=1) 
     t.grid_columnconfigure(i, weight=1) 
    t.grid_rowconfigure(2, weight=1) 


m = tk.Tk() 
text = tk.Text(m) 
text.pack(expand=1, fill='both') 
chooser = tk.Button(m, text='Choose Font', command=choose_font) 
chooser.pack(side='bottom') 

tk.mainloop() 

Choose Font을 클릭하면 글꼴 이름과 글꼴 크기를 삽입 할 수있는 다른 창이 나타납니다. 새 글꼴 이름과 글꼴 크기는 을 사용하는 다른 버튼 Apply Changes 클릭을 통해 적용 할 수 있습니다.

잘못된 입력을 처리하지 않았 음을 유의하십시오 (예 : 크기에 맞는 문자 삽입). 직접 입력해도됩니다.

+0

코드를 제공해 주셔서 감사합니다. 그러나 텍스트 창 크기를 조정하는 것뿐입니다. 텍스트의 글꼴과 실제 크기는 변경되지 않습니다. –

+0

@PseudonymEnigma 나에게'Text' 위젯의 글꼴 크기를 재조정합니다. 코드가 정확히 동일합니까? 그런데 왜 Canvas를 사용하고 있습니까? 모든 코드를 게시하면 더 많은 것을 도울 수 있습니다. – nbro

+0

튜플 사용에 대한 답변과 설명에 감사드립니다. 그러나 문제를 해결하지는 못합니다. –

1

문제는 글꼴을 지정하는 방법입니다. 문자열이 아닌 튜플을 사용해야합니다. 이것을 시도하십시오 :

font = (fontname, size) 
textPad.config(
    ..., 
    font=font, 
    ... 
) 

tkinter 문서를위한 좋은 장소는 effbot.org입니다. 가족의 이름에 공백이 포함되어있는 경우, 위에 설명 된 튜플 구문을 사용해야합니다

참고 : 페이지에 대한 widget styling이 글꼴을 지정에 대한이 말했다.