[英]How to change a QLabel to a QLineEdit when mouse pressed?
I am trying to create a custom class so that whenever a mouse press event occurs, a QLabel should change to a QLineEdit. 我试图创建一个自定义类,以便每当发生鼠标按下事件时,QLabel都应更改为QLineEdit。 So, after searching, I found this code on a Qt website. 因此,在搜索之后,我在Qt网站上找到了此代码。 But, unfortunately, it is not working. 但是,不幸的是,它不起作用。 A user who posted this question had accepted this code as working, but I am new to Qt, as well as Python, so I need some help. 发布此问题的用户已接受此代码正常工作,但是我对Qt和Python还是陌生的,因此我需要一些帮助。
class nameDisplay(QtGui.QLabel):
def __init__(self,buddyList,parent=None):
QtGui.QLabel.__init__(self, parent)
self.buddyList = buddyList
def mousePressEvent(self, event):
print 'mousePressEvent'
self.buddyList.username.hide()
self.buddyList.usernameInput = QtGui.QLineEdit(self.buddyList)
self.buddyList.usernameInput.setGeometry(QtCore.QRect(120, 10, 121, 20))
self.buddyList.usernameInput.setText(self.buddyList.username.text())
self.buddyList.usernameInput.selectAll()
self.buddyList.usernameInput.show()
self.connect(self.buddyList.usernameInput,QtCore.SIGNAL("returnPressed()"),self.editingFinish)
def editingFinish(self):
self.buddyList.usernameInput.hide()
self.buddyList.username.show()
self.buddyList.username.setText(self.buddyList.usernameInput.text())
Update : 更新 :
The error I am getting is: 我得到的错误是:
# Error: line 1: __init__() takes at least 2 arguments (1 given)
# Traceback (most recent call last):
# File "<maya console>", line 22, in <module>
# TypeError: __init__() takes at least 2 arguments (1 given) #
Here's an example of how to get a Qlabel
to switch over to a QLineEdit
. 这是一个如何获取Qlabel
切换到QLineEdit
的示例。 Alternatively you can use QLineEdit.setPlaceholderText()
to show some default text when the field is left empty. 或者,您可以使用QLineEdit.setPlaceholderText()
在字段为空时显示一些默认文本。 This may be another option for you to use (and will be way more simple). 这可能是您要使用的另一种选择(并且会更简单)。
from PySide import QtGui, QtCore
# Make a custom label widget (mostly for its mousePressEvent)
class BuddyLabel(QtGui.QLabel):
def __init__(self, buddy, parent = None):
super(BuddyLabel, self).__init__(parent)
self.buddy = buddy
# When it's clicked, hide itself and show its buddy
def mousePressEvent(self, event):
self.hide()
self.buddy.show()
self.buddy.setFocus() # Set focus on buddy so user doesn't have to click again
class Window(QtGui.QWidget):
def __init__(self, parent = None):
super(Window, self).__init__(parent)
# Create ui
self.myEdit = QtGui.QLineEdit()
self.myEdit.hide() # Hide line edit
self.myEdit.editingFinished.connect(self.textEdited)
self.myLabel = BuddyLabel(self.myEdit) # Create our custom label, and assign myEdit as its buddy
self.myLabel.setText('Nothing has been entered')
self.myLabel.setSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed) # Change vertical size policy so they both match and you don't get popping when switching
# Put them under a layout together
hLayout = QtGui.QHBoxLayout()
hLayout.addWidget(self.myLabel)
hLayout.addWidget(self.myEdit)
# Add a line edit with a place holder
self.myEdit2 = QtGui.QLineEdit()
self.myEdit2.setPlaceholderText('Nothing has been entered')
self.setFocus() # By default this line edit may have focus and the place holder won't show up on load, so focus on the widget
# Create main layout
mainLayout = QtGui.QVBoxLayout()
mainLayout.addLayout(hLayout)
mainLayout.addWidget(self.myEdit2)
self.setLayout(mainLayout)
# Resize and show!
self.resize(300, 200)
self.show()
def textEdited(self):
# If the input is left empty, revert back to the label showing
if not self.myEdit.text():
self.myEdit.hide()
self.myLabel.show()
win = Window()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.