2012-12-12 17 views
9

मैं शायद यह सोच रहा हूं, लेकिन किसी कारण से मुझे यह पता लगाना प्रतीत नहीं होता है। मैं अपने टेक्स्ट फ़ील्ड में स्क्रॉलबार संलग्न करने की कोशिश कर रहा हूं और ऐसा करने में असमर्थ रहा हूं।टेक्स्ट विजेट में स्क्रॉलबार कैसे संलग्न करें?

self.scroller = Scrollbar(self.root) 
self.scroller.place(x=706, y=121) 
self.outputArea = Text(self.root, height=26, width=100) 
self.outputArea.place(x=0, y=120) 
self.scroller.config(command=self.outputArea.yview) 
self.outputArea.config(state=DISABLED, yscrollcommand = self.scroller.set) 

इस कोड को एक बहुत छोटी स्क्रॉलबार डाल रहा है सही अपने पाठ फ़ील्ड के आगे (और बहुत छोटे से, मेरा मतलब है आप ऊपर व नीचे तीर लेकिन बीच में कुछ भी नहीं देख सकते हैं कि): यहाँ कोड के खंड है । जब मैं अपना टेक्स्ट फ़ील्ड भरता हूं तो मैं इसके साथ स्क्रॉल कर सकता हूं, लेकिन स्क्रॉलबार की ऊंचाई को कम से कम सेट करने का कोई तरीका है ताकि यह टेक्स्ट फ़ील्ड की ऊंचाई जैसा ही दिखाई दे? pack, grid, और place:

उत्तर

28

Tkinter तीन ज्यामिति प्रबंधकों है।
पैक और ग्रिड आमतौर पर जगह पर अनुशंसित होते हैं।

आप स्थिति स्क्रॉलबारपाठ विजेट के बगल में grid manager'sपंक्ति और स्तंभ विकल्पों
उपयोग कर सकते हैं।

पाठ के yview विधि के लिए स्क्रॉलबार विजेट के आदेश विकल्प सेट करें।

scrollb = tki.Scrollbar(..., command=txt.yview) 

को स्क्रॉलबार के सेट विधि पाठ विजेट के yscrollcommand विकल्प सेट करें।

import Tkinter as tki # Tkinter -> tkinter in Python3 

class App(object): 

    def __init__(self): 
     self.root = tki.Tk() 

    # create a Frame for the Text and Scrollbar 
     txt_frm = tki.Frame(self.root, width=600, height=600) 
     txt_frm.pack(fill="both", expand=True) 
     # ensure a consistent GUI size 
     txt_frm.grid_propagate(False) 
     # implement stretchability 
     txt_frm.grid_rowconfigure(0, weight=1) 
     txt_frm.grid_columnconfigure(0, weight=1) 

    # create a Text widget 
     self.txt = tki.Text(txt_frm, borderwidth=3, relief="sunken") 
     self.txt.config(font=("consolas", 12), undo=True, wrap='word') 
     self.txt.grid(row=0, column=0, sticky="nsew", padx=2, pady=2) 

    # create a Scrollbar and associate it with txt 
     scrollb = tki.Scrollbar(txt_frm, command=self.txt.yview) 
     scrollb.grid(row=0, column=1, sticky='nsew') 
     self.txt['yscrollcommand'] = scrollb.set 

app = App() 
app.root.mainloop() 

बात यह है कि अपने स्क्रॉलबार संबोधित करेंगे छोटे जा रहा है sticky='nsew' है,
जो आप के बारे में → here या here पढ़ सकते हैं:

txt['yscrollcommand'] = scrollb.set 

यहाँ एक काम कर उदाहरण है।

कोई चीज जो आप अभी सीखने के लिए उपयोगी होगा कि विभिन्न Tkinter विगेट्स जब तक कि वे एक ही मूल का हिस्सा नहीं है के रूप में ही कार्यक्रम के भीतर विभिन्न ज्यामिति प्रबंधकों का उपयोग कर सकते है।


यह भी उल्लेख ScrolledText मॉड्यूल (python3 में tkinter.scrolledtext का नाम बदला) है कि वहाँ के लायक है। इसमें एक कक्षा है जिसे स्क्रॉलेडटेक्स्ट भी कहा जाता है जो एक यौगिक विजेट (टेक्स्ट & स्क्रॉलबार) है।

# Python 2.7 
import Tkinter as tki 
from ScrolledText import ScrolledText 

class App(object): 

    def __init__(self): 
     self.root = tki.Tk() 

    # create a Text widget with a Scrollbar attached 
     self.txt = ScrolledText(self.root, undo=True) 
     self.txt['font'] = ('consolas', '12') 
     self.txt.pack(expand=True, fill='both') 

app = App() 
app.root.mainloop() 
+0

धन्यवाद, इससे मुझे बहुत मदद मिली। मैं वास्तव में इसकी प्रशंसा करता हूँ। – jwebster

+2

मैं "आमतौर पर * जगह पर अनुशंसित" करने के लिए "आमतौर पर स्थान पर अनुशंसित" बदल दूंगा। जगह उपयोगी है, लेकिन केवल दुर्लभ परिस्थितियों के लिए। –

+0

@honestabe आप उत्तर के विभिन्न वर्गों के बीच जाने के लिए लाइन कैसे प्राप्त करते हैं? – xxmbabanexx

0

आप एक इनपुट बॉक्स है, तो एक आसान तरीका scrolledtext समारोह का उपयोग कर के साथ काम कर रहे हैं। इसे खोजने में मुझे 4+ घंटे लग गए। प्यार tkinter प्यार नहीं है?

दो बातें ध्यान रखें ... अतिरिक्त आयात आवश्यक आयात tkinter.scrolledtext रूप tkscrolled और आप insert का उपयोग करने और get (अधिक भयानक नामकरण) का उपयोग मूल्य

कोड के इस बिट पढ़ डिफ़ॉल्ट मान सेट काम करने के लिए 10 लाइनों पाठ इनपुट बॉक्स द्वारा अपने 20 चरित्र चौड़ा बनाने के लिए केंद्रीय था।

import tkinter.scrolledtext as tkscrolled 
import tkinter as tk 

default_text = '1234' 
width, height = 20,10 
TKScrollTXT = tkscrolled.ScrolledText(10, width=width, height=height, wrap='word') 

# set default text if desired 
TKScrollTXT.insert(1.0, default_text) 
TKScrollTXT.pack(side=tk.LEFT) 

स्क्रॉल बार कॉल में परिभाषित की गई ऊंचाई तक पहुंचने के बाद दिखाई देते हैं। वे भूरे रंग के होते हैं और पृष्ठभूमि में अच्छी तरह से मिश्रण करते हैं। एक बार जब आप सही कॉल करने के बारे में पता लगाते हैं तो यह बहुत अच्छा काम करता है।

मुझे आशा है कि यह आपके प्रश्न के लिए प्रासंगिक है!

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