占位符文本未显示(pyside / pyqt)

时间:2014-06-17 22:27:30

标签: python qt user-interface pyqt pyside

学习PySide,我正在调整文本编辑小部件(QLineEdit)并尝试使用setPlaceHolderText设置占位符文本,如下面的代码片段(我从main调用)。不幸的是,它没有像我预期的那样工作。代码运行,但文本框为空,不显示占位符文本。我在Windows 7,Python 2.7(在iPython中工作)。

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/

并且不要看到我做的不同。

1 个答案:

答案 0 :(得分:12)

由于您的窗口小部件仅包含一个组件(QLineEdit),因此该组件始终会抓住焦点。如果修改为空且具有焦点*,则占位符文字为only shown

一个简单的解决方案是在显示您的小部件时关注不同的组件,例如: 在self.setFocus()之前插入self.show() 缺点是这样用户必须单击文本字段或按 Tab 才能写入字段。为避免这种情况,您可以截取窗口小部件上的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中的情况发生了变化。不幸的是PySide还没有支持Qt5,所以你必须使用PyQt5。