2011-08-15 9 views
10

निम्नलिखित कार्यक्रम एक त्रुटि को जन्म देती है:अजगर में एक खिड़की के अंतिम चरित्र + शाप

import curses 

def test(scr): 
    top = curses.newwin(1, 10, 0, 0) 
    top.addstr(0, 9, "X") 

curses.wrapper(test) 

ऐसा लगता है कि जब भी मैं addstr उपयोग करने का प्रयास लग रहा है() की अंतिम पंक्ति के अंतिम स्तंभ में एक चरित्र लिखने के लिए एक खिड़की (यहां तक ​​कि जब यह स्क्रीन से छोटी है), यह एक त्रुटि उठाता है। मैं स्क्रॉल नहीं करना चाहता, मुझे कर्सर की स्थिति की परवाह नहीं है। मैं चाहता हूं कि खिड़की की हर एक स्थिति में अक्षर लिखने में सक्षम हो। क्या यह सभी के लिए संभव है? मैं यह कैसे कर सकता हूँ?

+0

संबंधित: http://stackoverflow.com/questions/10877469 – augurar

उत्तर

9

ऐसा लगता है कि ऐतिहासिक कारणों से शाप के साथ बस खिड़की का अंतिम चरित्र असंभव है।

एकमात्र कामकाज जो मैं पा सकता हूं वह चरित्र को अपने अंतिम गंतव्य के बाईं ओर एक स्थान लिखने और इसे सम्मिलित करने के साथ दबाकर लिखता है। निम्नलिखित कोड "एक्स" धक्का 9 स्थिति देगा:

top = curses.newwin(1, 10, 0, 0) 
top.addstr(0, 8, "X") 
top.insstr(0, 8, " ") 
6

बाहर कर देता है कि curses वास्तव में अंत तक कि अंतिम स्थिति के लिए लिख करता है: यह सिर्फ सही बाद में एक त्रुटि को जन्म देती है।

इसलिए, यदि आप निम्नलिखित हैक/असजीलाता साथ रह सकते हैं:

#! /usr/bin/env python 
import curses 

def test(scr): 
    top = curses.newwin(1, 10, 0, 0) 
    try: 
     top.addstr(0, 9, "X") 
    except curses.error: 
     pass 

curses.wrapper(test) 

अर्थात, फँसाने और त्रुटि की अनदेखी, तो कोड ज्यादा सरल दोनों डिजाइन और कार्यान्वयन में हो जाएगा।

+0

मुझे वह दृष्टिकोण पसंद है। यह वास्तव में साफ नहीं है, लेकिन यहां मैंने इसे कैसे संभाला है: मैं 'बेसविंडो' कक्षा के अंदर खिड़कियां लपेट रहा हूं (जिसका वर्ग अस्पष्ट है), जहां मैं अपने सभी तरीकों को परिभाषित करता हूं। वह वर्ग '__getattr__' को लागू करके' एडस्ट्र 'जैसे विंडो विधि नामों को हल करता है, जो बदले में वास्तविक विंडो की विशेषता को वापस कर देगा। मैंने उस ऐडस्ट्रेट विधि को उस दृष्टिकोण को अनुकूलित किया: मेरा 'बेसविंडो' अब अपनी 'एडस्ट्र' विधि को परिभाषित करता है, जो वास्तविक विंडो की 'एडस्ट्र' विधि को कोशिश करता है और कॉल करता है, और चुपचाप किसी भी 'curses.error' अपवाद को पास करता है। –

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