2013-07-15 5 views
11

नीचे दिया गया कोड टेक्स्ट विजेट में स्क्रॉल बार का उपयोग करने का एक बदसूरत लेकिन कार्यात्मक उदाहरण उत्पन्न करता है और इसके परिणामस्वरूप कुछ प्रश्न होते हैं। नोट: यह विंडोज़ बॉक्स पर पायथन 3 का उपयोग करके किया जाता है।tkinter "scrolledtext" मॉड्यूल को कैसे कोड करें

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

  2. "स्क्रॉलडटेक्स्ट" नामक टिंकर मॉड्यूल के कई संदर्भ हैं जो स्क्रॉलबार को टेक्स्ट बॉक्स में जोड़ने के लिए एक बेहतर तंत्र माना जाता है, लेकिन मुझे इसे आयात करने और इसे कॉल करने के बारे में कोई उदाहरण नहीं मिला है कि मैं काम करने में सक्षम हूं (शायद एक उदाहरण की आवश्यकता है)।


frame1 = tk.Frame(win,width=80, height=80,bg = '#808000') 
frame1.pack(fill='both', expand='yes') 
scrollbar = Scrollbar(frame1) 
scrollbar.pack(side=RIGHT, fill=Y) 
editArea = Text(frame1, width=10, height=10, wrap=WORD, yscrollcommand=scrollbar.set) 
editArea.pack()  
scrollbar.config(command=editArea.yview) 
editArea.place(x=10,y=30) 

उत्तर

20

आप सही हैं, तो आप ScrolledText विजेट tkinter.scrolledtext मॉड्यूल से, इस तरह का उपयोग कर सकते गया:

import tkinter as tk 
import tkinter.scrolledtext as tkst 

win = tk.Tk() 
frame1 = tk.Frame(
    master = win, 
    bg = '#808000' 
) 
frame1.pack(fill='both', expand='yes') 
editArea = tkst.ScrolledText(
    master = frame1, 
    wrap = tk.WORD, 
    width = 20, 
    height = 10 
) 
# Don't use widget.place(), use pack or grid instead, since 
# They behave better on scaling the window -- and you don't 
# have to calculate it manually! 
editArea.pack(padx=10, pady=10, fill=tk.BOTH, expand=True) 
# Adding some text, to see if scroll is working as we expect it 
editArea.insert(tk.INSERT, 
"""\ 
Integer posuere erat a ante venenatis dapibus. 
Posuere velit aliquet. 
Aenean eu leo quam. Pellentesque ornare sem. 
Lacinia quam venenatis vestibulum. 
Nulla vitae elit libero, a pharetra augue. 
Cum sociis natoque penatibus et magnis dis. 
Parturient montes, nascetur ridiculus mus. 
""") 
win.mainloop() 

और वहाँ तुम जाओ:

enter image description here

9

स्क्रॉल किए गए टेक्स्ट विजेट का उपयोग करते समय आपको कोड की कुछ पंक्तियां बचा सकती हैं, यह ऐसा कुछ नहीं कर रहा है जिसे आप स्वयं नहीं कर सकते हैं। इसे स्वयं करने से कुछ रहस्यों को दूर करने में मदद मिलेगी।

आप वास्तव में सबकुछ लगभग सही कर रहे हैं। आप जो गलती कर रहे हैं वह यह है कि आपको अपना टेक्स्ट विजेट इसके कंटेनर को पूरी तरह से एक छोटे से हिस्से के बजाय भरना चाहिए।

यह करने के लिए मानक तरीका इस तरह है:

container = tk.Frame(...) 
text = tk.Text(container, ...) 
scrollbar = tk.Scrollbar(container, ...) 
scrollbar.pack(side="right", fill="y") 
text.pack(side="left", fill="both", expand=True) 

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

ध्यान दें कि आप यहां भी ग्रिड का उपयोग कर सकते हैं। यदि आपके पास केवल लंबवत स्क्रॉलबार है तो पैक आसान है। यदि आपके पास दोनों क्षैतिज और ऊर्ध्वाधर स्क्रॉलबार हैं, तो ग्रिड थोड़ा और समझ में आता है।

भ्रम को पूरा करने के लिए, आप पाठ विजेट की सीमावर्ती सीमा को शून्य पर सेट कर सकते हैं, और युक्त फ्रेम की सीमावर्ती को सनकी की राहत के साथ 1 पर सेट कर सकते हैं, और स्क्रॉलबार टेक्स्ट विजेट में "अंदर" दिखाई देगा ।

यहां एक संपूर्ण काम कर उदाहरण है कि अधिक या कम अपने उदाहरण की तरह लग रहा है:

import Tkinter as tk 

win = tk.Tk() 

win.configure(background="#808000") 

frame1 = tk.Frame(win,width=80, height=80,bg = '#ffffff', 
        borderwidth=1, relief="sunken") 
scrollbar = tk.Scrollbar(frame1) 
editArea = tk.Text(frame1, width=10, height=10, wrap="word", 
        yscrollcommand=scrollbar.set, 
        borderwidth=0, highlightthickness=0) 
scrollbar.config(command=editArea.yview) 
scrollbar.pack(side="right", fill="y") 
editArea.pack(side="left", fill="both", expand=True) 
frame1.place(x=10,y=30) 

win.mainloop() 

व्यक्तिगत तौर पर मैं वैश्विक आयात कर की सिफारिश करते हैं, और मैं जगह इस्तेमाल करने की सलाह नहीं है, लेकिन मैं चाहता था इसे यथासंभव अपने मूल के करीब रखने के लिए।

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