2011-10-11 14 views
18

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

from tkinter import * 
root=Tk() 
frame=Frame(root,width=300,height=300) 
frame.grid(row=0,column=0) 
canvas=Canvas(frame,bg='#FFFFFF',width=300,height=300,scrollregion=(0,0,500,500)) 
hbar=Scrollbar(canvas,orient=HORIZONTAL) 
hbar.pack(side=BOTTOM,fill=X) 
hbar.config(command=canvas.xview) 
vbar=Scrollbar(canvas,orient=VERTICAL) 
vbar.pack(side=RIGHT,fill=Y) 
vbar.config(command=canvas.yview) 
canvas.config(width=300,height=300) 
canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set) 
canvas.pack(side=LEFT,expand=True,fill=BOTH) 

root.mainloop() 

उत्तर

26

आपका स्क्रॉलबार एक माता पिता, कैनवास के रूप में नहीं फ्रेम की आवश्यकता है:

from tkinter import * 
root=Tk() 
frame=Frame(root,width=300,height=300) 
frame.grid(row=0,column=0) 
canvas=Canvas(frame,bg='#FFFFFF',width=300,height=300,scrollregion=(0,0,500,500)) 
hbar=Scrollbar(frame,orient=HORIZONTAL) 
hbar.pack(side=BOTTOM,fill=X) 
hbar.config(command=canvas.xview) 
vbar=Scrollbar(frame,orient=VERTICAL) 
vbar.pack(side=RIGHT,fill=Y) 
vbar.config(command=canvas.yview) 
canvas.config(width=300,height=300) 
canvas.config(xscrollcommand=hbar.set, yscrollcommand=vbar.set) 
canvas.pack(side=LEFT,expand=True,fill=BOTH) 

root.mainloop() 

कारण है कि इस काम करता है कैसे की वजह से है pack काम करता है। डिफ़ॉल्ट रूप से यह अपने बच्चों को फिट करने के लिए एक कंटेनर को कम करने (या बढ़ने) का प्रयास करेगा। चूंकि स्क्रॉलबार मूल उदाहरण में कैनवास के बच्चे हैं, इसलिए कैनवास फिट हो जाता है।

यदि आप स्क्रॉलबार को कैनवास के अंदर दिखाना चाहते हैं, तो चाल अतिरिक्त फ्रेम का उपयोग करना है। इस आंतरिक फ्रेम में कैनवास और स्क्रॉलबार रखें, सीमाओं को कैनवास से और फ्रेम के लिए चालू करें। फ्रेम की पृष्ठभूमि को कैनवास के समान सेट करें और यह दिखाई देगा कि स्क्रॉलबार कैनवास के अंदर हैं।

+0

हमें आखिरी कैनवास क्यों पैक करना चाहिए? मैंने देखा है कि जब मैं किसी भी स्क्रॉलबार से पहले कैनवास पैक करता हूं तो यह क्षैतिज स्क्रॉलबार को ओवरलैप करने के समाप्त होता है - मैंने अभी टिंकर का उपयोग करना शुरू किया, लेकिन मैंने सोचा कि पैक सामान को ओवरलैप नहीं करेगा। धन्यवाद – Lanfear

+1

और कोर 'scrollregion = (0,0,500,500) 'है, इसके बिना पूरा काम नहीं कर सकता !! – Turtle

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