2015-08-10 8 views
5

मैं tk.Text में utf-8 अक्षरों को प्रदर्शित करने के लिए सबसे अच्छा फ़ॉन्ट खोजने का प्रयास कर रहा हूं।tkinter - पाठ के लिए फ़ॉन्ट कैसे सेट करें?

मैं अजगर प्रिंट सभी परिवार के नाम इस कोड का उपयोग टी करने के लिए जाना जाता है:

print(font.families(root=self.parent)) 

और इस कोड का उपयोग उपयोगों के लिए सभी ज्ञात नाम:

print(font.names(root=self.parent)) 

हालांकि बाहर परिवारों उत्पादन फोंट की एक सूची है, जिसमें नाम एक या एक से अधिक शब्द शामिल हैं।

text = tk.Text(master=self.frame) 
text.configure(font='helvetica 12') 

लेकिन जब मैं फ़ॉन्ट नाम, जिसमें अनेक शब्द से मिलकर बनता है के साथ एक ही प्रयास करते हैं, मैं कोई त्रुटि मिलती है:

_tkinter.TclError: expected integer but got <second word of the family name> 

मैं कर सकते हैं यह एक शब्द इस तरह से लोगों को सेट करना आसान है 'टी शैली यह, क्योंकि यह एक टी और नहीं एक टीटीके विजेट है, इसलिए दुर्भाग्य से मैं नहीं कर सकते:

style.configure('My.TText', fontsize=12, font='<family name with multiple words>') 

मैं भी बस इस तरह परिवार का नाम की सफेद स्थान को निकालना करने की कोशिश की:

text.configure(font='fangsongti') 

लेकिन यह टिंकर को कुछ फ़ॉलबैक फ़ॉन्ट का उपयोग करने का कारण बनता है। मैंने इसे एक नाम दर्ज करने की जांच की:

text.configure(font='fangsongtisdngfjsbrgkrkjgbkl') 
print(text.cget('font')) 

और इसके परिणामस्वरूप मैंने पारिवारिक नाम के रूप में दर्ज की गई सटीक स्ट्रिंग को प्रिंट करने में परिणाम दिया। तो यह कई शब्द नामों को छोड़कर बस सबकुछ स्वीकार करता है।

मैं कुछ फोंट, जो ठीक लग रहे हैं पाया है, लेकिन केवल कुछ विशिष्ट आकार में और मुझे यकीन है कि अगर वे सबसे सिस्टम पर उपलब्ध हैं नहीं कर रहा हूँ:

# helvetica 12 
# gothic 13 
# mincho 13 

मैं कैसे नाम कई से मिलकर साथ फोंट सेट कर सकते हैं शब्द? यदि मैं नहीं कर सकता, तो कौन सा फ़ॉन्ट, एक शब्द का नाम रखने वाला है, यूटीएफ -8 अक्षरों को प्रदर्शित करने के लिए उपयुक्त है उदाहरण के लिए चीनी (लेकिन विशेष रूप से नहीं!) सामान्य फ़ॉन्ट आकार और पर अधिकांश सिस्टम पर उपलब्ध है?

+0

'फ़ॉन्ट' पैरामीटर, यदि मैं गलत नहीं हूं, तो फ़ॉन्ट ऑब्जेक्ट की आवश्यकता है! तो, बस 'फ़ॉन्ट' वर्ग का उपयोग करके अपना फ़ॉन्ट ऑब्जेक्ट बनाएं, और फिर अपने विजेट के उस' फ़ॉन्ट' फ़ील्ड के संदर्भ को असाइन करें। – nbro

+0

@ एनब्रो: यह एक ट्यूपल भी ले सकता है। –

+0

@ ब्रायन ओक्ले हाँ, मुझे उस विकल्प के बारे में निश्चित नहीं था;) – nbro

उत्तर

7

जब इस तरह से फोंट का उल्लेख करते समय एक टपल का उपयोग करें:

text.configure(font=("Times New Roman", 12, "bold")) 

और भी बेहतर, आप अपने खुद के कस्टम फ़ॉन्ट वस्तुओं को बनाने और नाम से गुण निर्दिष्ट कर सकते हैं। नोट: इससे पहले कि आप एक फ़ॉन्ट ऑब्जेक्ट बना सकें, आपको पहले रूट विंडो बनाना होगा।

# python 2 
# import Tkinter as tk 
# from tkFont import Font 

# python 3 
import tkinter as tk 
from tkinter.font import Font 

root = tk.Tk() 
text = tk.Text(root) 
... 
myFont = Font(family="Times New Roman", size=12) 
text.configure(font=myFont) 

लाभ अपने स्वयं के फोंट बनाने के लिए है कि आप बाद में फॉन्ट के किसी भी विशेषता है, और हर विजेट का उपयोग करता है कि फ़ॉन्ट स्वचालित रूप से अपडेट किया जाएगा बदल सकता है।

myFont.configure(size=14) 
+0

धन्यवाद ब्रायन, यह काम करता है! मैं गलत तरीके से मान रहा था कि टीके विजेट्स टीटीके कक्षाओं की वस्तुओं का उपयोग नहीं कर सकते हैं, क्योंकि टीटीके नया है। Tuple "चाल" भी जानना अच्छा है। – Zelphir

+0

@SashaPachev: संपादन के लिए धन्यवाद! वह बग डेढ़ साल तक अनजान हो गया! –

+0

आपको 'root' तर्क 'फ़ॉन्ट' में अनुपलब्ध प्रतीत होता है। – AlwaysLearning

संबंधित मुद्दे