2012-03-23 21 views
5

मैं पाइथन को थोड़ा बेहतर सीखने के लिए शुरुआत करने वालों के लिए एक सरल शब्द प्रोसेसर बनाने की कोशिश कर रहा हूं।फ़ॉन्ट परिवर्तन पर टिंकर टेक्स्ट विजेट का आकार कैसे बदलें?

मैं मुख्य संपादन प्रोग्राम के लिए Tkinter Text विजेट का उपयोग कर रहा है, केवल समस्या ऊंचाई और चौड़ाई पात्रों द्वारा निर्धारित किए जाते हैं।

जब मैं फ़ॉन्ट बदलता हूं, तो यह समस्या उत्पन्न करता है, क्योंकि सभी फोंट समान चौड़ाई नहीं हैं।

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

क्या पिक्सेल में चौड़ाई और ऊंचाई को परिभाषित करने का कोई तरीका है?

.grid_propagate(False) आकार के लिए उपयोगी नहीं है तकनीकी रूप से बदल नहीं रहा है, केवल वर्ण चौड़ाई है।

मैं अब के लिए wxPython से दूर रहने की कोशिश कर रहा हूं, क्योंकि मैंने इस बिंदु तक जो कुछ भी किया है, वह टिंकर में रहा है।

मैंने व्यापक googling के अंतहीन घंटे किया है लेकिन कोई समाधान नहीं मिला है।

उत्तर

9

जब आप कहते हैं कि आप grid_propagate(False) का उपयोग नहीं कर सकते हैं, तो आप गलत हैं, क्योंकि आप कर सकते हैं। grid_propagateवास्तविक आकार से संबंधित है, आकार विशेषता नहीं है। साथ ही, यदि आप अपने आवेदन को wm_geometry का उपयोग करके बस एक निश्चित आकार देते हैं, तो फ़ॉन्ट परिवर्तन विंडो के आकार को प्रभावित नहीं करेंगे।

import Tkinter as tk 
import tkFont 

class SampleApp(tk.Tk): 
    def __init__(self, *args, **kwargs): 
     tk.Tk.__init__(self, *args, **kwargs) 
     self._textFont = tkFont.Font(name="TextFont") 
     self._textFont.configure(**tkFont.nametofont("TkDefaultFont").configure()) 

     toolbar = tk.Frame(self, borderwidth=0) 
     container = tk.Frame(self, borderwidth=1, relief="sunken", 
          width=600, height=600) 
     container.grid_propagate(False) 
     toolbar.pack(side="top", fill="x") 
     container.pack(side="bottom", fill="both", expand=True) 

     container.grid_rowconfigure(0, weight=1) 
     container.grid_columnconfigure(0, weight=1) 
     text = tk.Text(container, font="TextFont") 
     text.grid(row=0, column=0, sticky="nsew") 

     zoomin = tk.Button(toolbar, text="+", command=self.zoom_in) 
     zoomout = tk.Button(toolbar, text="-", command=self.zoom_out) 
     zoomin.pack(side="left") 
     zoomout.pack(side="left") 

     text.insert("end", '''Press te + and - buttons to increase or decrease the font size''') 

    def zoom_in(self): 
     font = tkFont.nametofont("TextFont") 
     size = font.actual()["size"]+2 
     font.configure(size=size) 

    def zoom_out(self): 
     font = tkFont.nametofont("TextFont") 
     size = font.actual()["size"]-2 
     font.configure(size=max(size, 8)) 

if __name__ == "__main__": 
    app = SampleApp() 
    app.mainloop() 
+0

मैं पाठ विजेट के साथ काम नहीं कर रहा grid_propagate की चर्चा करते हुए किया गया था:

यहाँ एक उदाहरण grid_propagate, जो पिक्सल में एक निश्चित आकार के कंटेनर सेट का उपयोग कर रहा है। तकनीकी रूप से यह काम करता है लेकिन यह अभी भी विस्तारित है क्योंकि इसकी चौड़ाई वर्णों में है, और इसलिए यह वर्णों में समान लंबाई रहता है, लेकिन सभी वर्ण आकार समान नहीं हैं। टेक्स्ट विजेट मेरी पूरी विंडो नहीं भरता है, मैं चाहता था कि बाद में बटन जोड़ने के लिए जगह हो। समस्या यह है कि वास्तविक 'टेक्स्ट' विजेट प्रत्येक और अलग-अलग फ़ॉन्ट की आवश्यकताओं को पूरा करने के लिए पुनः आकार बदलता रहता है। कुछ टाइप करते समय और फ़ॉन्ट बदलते हुए और टेक्स्ट विजेट को विस्तार और अनुबंध करने पर यह मूर्खतापूर्ण दिखता है। – reallycoolnerd

+0

@reallycoolnerd: मुझे खेद है, लेकिन आप 'grid_propagate' के बारे में गलत हैं। इसका आकार विशेषता के साथ कुछ लेना देना नहीं है, इसमें विजेट के वास्तविक आकार के साथ सबकुछ करना है। यदि आप कोड दिखा सकते हैं जहां आप 'grid_propagate' का उपयोग करने का प्रयास करते हैं और यह काम नहीं करता है, तो हम इसे ठीक कर सकते हैं। ऐसा लगता है जैसे आप समझ नहीं पाते कि कैसे 'grid_propagate' काम करता है। आपको एहसास है कि आपको इसे माता-पिता पर फोन करना है? इसका टेक्स्ट टेक्स्ट पर 'grid_propagate' को कॉल करने का कोई प्रभाव नहीं पड़ता है। –

+0

@reallycoolnerd: क्या मेरे उदाहरण के बारे में कुछ है जो आपको भ्रमित कर रहा है? उदाहरण स्पष्ट रूप से दिखाता है कि मैं अपने कंटेनर के आकार को सेट करके और ज्यामिति प्रसार को बंद करके टेक्स्ट विजेट का आकार पिक्सल में कैसे सेट कर सकता हूं। शायद अगर आप समझा सकते हैं कि आप उदाहरण को क्यों नहीं समझते हैं तो मैं समझ सकता हूं कि इसे कैसे सुधारें। –

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