2014-06-17 9 views
5

सीखना पायसाइड, मैं एक टेक्स्ट एडिट विजेट (QLineEdit) tweaking कर रहा हूं और नीचे दिए गए कोड स्निपेट के रूप में setPlaceHolderText का उपयोग करके प्लेसहोल्डर टेक्स्ट सेट करने का प्रयास कर रहा हूं (जिसे मैं main से आमंत्रित करता हूं)। दुर्भाग्य से, यह काम नहीं कर रहा है जैसा कि मैंने उम्मीद की थी। कोड चलता है, लेकिन टेक्स्ट बॉक्स खाली है, प्लेसहोल्डर टेक्स्ट नहीं दिखाता है। मैं विंडोज 7 में हूं, पायथन 2.7 (आईपीथन में काम कर रहा हूं)।प्लेसहोल्डर टेक्स्ट नहीं दिख रहा है (pyside/pyqt)

class MyTextEdit(QtGui.QWidget): 
    def __init__(self): 
     QtGui.QWidget.__init__(self) 
     self.textEditor=QtGui.QLineEdit(self) 
     self.textEditor.move(50,15) 
     self.textEditor.setPlaceholderText("Don't mind me.") 
     self.setGeometry(100, 100, 200, 50) 
     self.show()   

कोई भी समझता है कि मैं क्या गलत कर रहा हूं? मैं निम्नलिखित साइटों से उदाहरण निम्नलिखित है:

http://nullege.com/codes/search/PyQt4.QtGui.QLineEdit.setPlaceholderText

http://www.pythoncentral.io/pyside-pyqt-tutorial-interactive-widgets-and-layout-containers/

और नहीं दिख रहा है कि मैं क्या अलग तरह से कर रहा हूँ।

उत्तर

11

जैसा कि आपके विजेट में केवल एक घटक (QLineEdit) है, वह घटक हमेशा प्रारंभ में ध्यान केंद्रित करेगा। प्लेसहोल्डर टेक्स्ट only shown है यदि संपादन खाली है और पर ध्यान केंद्रित नहीं है *।

एक साधारण समाधान आपके विजेट को दिखाने के लिए एक अलग घटक पर ध्यान केंद्रित करना होगा, उदा। self.show() से पहले डालने से।
नकारात्मकता यह है कि इस तरह उपयोगकर्ता को टेक्स्ट फ़ील्ड में क्लिक करना होगा या फ़ील्ड में लिखने में सक्षम होने से पहले टैब दबाएं। इससे बचने के लिए, आप विजेट पर keyPress ईवेंट को रोक सकते हैं।

उदाहरण:

class MyTextEdit(QtGui.QWidget): 
    '''Some positioning''' 
    def __init__(self): 
     QtGui.QWidget.__init__(self) 
     self.textEditor=QtGui.QLineEdit(self) 
     self.textEditor.move(50,15) 
     self.textEditor.setPlaceholderText("Hi I'm de fault.") 
     self.setGeometry(100, 100, 200, 50) 
     self.setFocus() 
     self.show() 

    def keyPressEvent(self, evt): 
     self.textEditor.setFocus() 
     self.textEditor.keyPressEvent(evt) 

* नोट: इस Qt5 में बदल गया है जहां paceholder पाठ के रूप में लंबी लाइन संपादित रिक्त है के रूप में दिखाया गया है। दुर्भाग्य से PySide Qt5 (अभी तक) का समर्थन नहीं करता है, इसलिए आपको PyQt5 का उपयोग करना होगा।

+1

धन्यवाद उस स्पष्ट और सहायक प्रतिक्रिया के लिए बहुत कुछ। – neuronet

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