2011-01-10 24 views
5

मैं टिंकर सीख रहा हूं और एक साधारण 8 पहेली गेम बना रहा हूं।
(उदाहरण: http://www.permadi.com/java/puzzle8/)पायथन टिंकर पैडिंग मुद्दा

प्रत्येक नंबर एक कैनवास वस्तु एक फ्रेम एक ग्रिड लेआउट का उपयोग कर में रखा है। ऑब्जेक्ट्स में से एक कैनवास ऑब्जेक्ट्स के बीच अतिरिक्त पैडिंग जोड़ रहा है। मैंने सीमा चौड़ाई को कैनवास ऑब्जेक्ट्स -2 पर सेट किया, जिसने कुछ लोगों के मुद्दे को हल किया, लेकिन यह मेरे लिए अतिरिक्त पैडिंग को थोड़ा कम कर दिया। इस मूल्य को -4 पर सेट करना मेरे कैनवास क्षेत्र में कटौती करना शुरू कर देता है।

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

मुझे पता चला कि एक और अजीबता मेरे कैनवास वस्तुओं के लिए सीमा बना रही थी, मैंने create_rectangle का उपयोग किया था, लेकिन मुझे x_1 और y_1 को 0,0 या 2,2 के बजाय 4,4 पर शुरू करना था, जो मैं उम्मीद करता हूं 2 पीएक्स सीमा।

मेरा कोड यहां है। किसी भी मदद/सलाह/कामकाज/अन्यथा बहुत सराहना की है।

#!/usr/bin/python 

from Tkinter import * 

class Number(Canvas): 
    def __init__(self, master=None, number=1): 
     Canvas.__init__(self, master, width=100, height=100, bd=-2) 
     self.create_text(50, 50, text=str(number), anchor=CENTER) 
     self.create_rectangle(4, 4, 98, 98, width=2) 


class Application(Frame): 
    def create_widgets(self): 
     self.playarea = Frame(self, width=300, height=300) 
     self.playarea.grid_propagate(0) 
     self.playarea.grid() 
     self.playarea.numbers = [] 
     for number in xrange(1, 10): 
      num_obj = Number(self.playarea, number) 
      self.playarea.numbers.append(num_obj) 
      row = number // 3 
      col = number % 3 
      num_obj.grid(row=row, column=col) 

    def __init__(self, master=None): 
     Frame.__init__(self, master) 
     self.grid() 
     self.create_widgets() 


def main(): 
    app = Application() 
    app.master.title("Sample Application") 
    app.mainloop() 

if __name__ == '__main__': 
    main() 

उत्तर

9

सबसे अधिक संभावना अपनी समस्या का कारण है कि आप शून्य करने के लिए प्रत्येक कैनवास के highlightthickness विशेषता निर्धारित करने की उपेक्षा कर रहे हैं। यह मान उस विजेट के चारों ओर एक रंगीन अंगूठी को नियंत्रित करता है जो यह इंगित करता है कि इसका ध्यान केंद्रित है।

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

+1

हाइलाइटथिक्सी अपराधी थी। सहायता के लिए धन्यवाद! पृष्ठभूमि चाल ने चमत्कार भी किया। "प्रत्येक विजेट को एक अलग पृष्ठभूमि रंग दें" के लिए – zrbecker

+1

+10। मैंने इसे एक कठिन लेआउट मुद्दे के लिए पहले इस्तेमाल किया था, लेकिन जब तक आपने इसका उल्लेख नहीं किया तब तक मैं इसके बारे में भूल गया। –

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