簡體   English   中英

模仿QLineEdit上的returnPressed信號

[英]Mimic a returnPressed signal on QLineEdit

我有一個QLineEdit小部件,您可以在其中以編程方式或通過用戶輸入來編輯文本。

雖然設法使User Input方法工作,但在使用setText之后, tabRect仍然有效的編程方式存在問題。

QLineEdit / tabRect發生在QTabBar的選項卡重命名之上。

def _renameTab(self, index, new_name=""):
    self._edited_tab_index = index
    if self._edited_tab_index != self.currentIndex():
        self.setCurrentIndex(self._edited_tab_index)

    rect = self.tabRect(index)
    top_margin = 3
    left_margin = 6
    self._rename_line_edit = QtGui.QLineEdit(self)
    self._rename_line_edit.show()
    self._rename_line_edit.move(
        rect.left() + left_margin, rect.top() + top_margin
    )
    self._rename_line_edit.resize(
        rect.width() - 2 * left_margin, rect.height() - 2 * top_margin
    )

    if new_name:
        self._rename_line_edit.setText(new_name)
        # self._rename_line_edit.clearFocus()
        # self._rename_line_edit.textEdited.connect(self._renameTabFinished)

    else:
        self._rename_line_edit.setText(self.tabText(index))

    self._rename_line_edit.selectAll()
    self._rename_line_edit.setFocus()
    self._rename_line_edit.editingFinished.connect(self._renameTabFinished)
    self.currentChanged.connect(self._renameTabFinished)

嘗試使用clearFocus似乎沒有幫助。

有沒有一種方法可以模仿到QLineEdit的returnPressed類似於toggle()trigger()

您可以使用QCoreApplication :: postEvent()發送QKeyEvent:

from PyQt4 import QtCore, QtGui
from functools import partial
import random


class LineEdit(QtGui.QLineEdit):
    def emulate_returnPressed(self):
        keyEvent = QtGui.QKeyEvent(
            QtCore.QEvent.KeyPress, QtCore.Qt.Key_Return, QtCore.Qt.NoModifier
        )
        QtCore.QCoreApplication.postEvent(self, keyEvent)


class Widget(QtGui.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)
        lay = QtGui.QVBoxLayout(self)
        self.les = []
        for i in range(4):
            le = LineEdit("message-{}".format(i))
            le.returnPressed.connect(self.on_returnPressed)
            lay.addWidget(le)
            self.les.append(le)

        wrapper = partial(self.on_timeout, self.les)
        timer = QtCore.QTimer(self, timeout=wrapper, interval=1000)
        timer.start()

    def on_returnPressed(self):
        print("on_returnPressed", self.sender().text())

    def on_timeout(self, les):
        le = random.choice(self.les)
        le.emulate_returnPressed()


if __name__ == "__main__":
    import sys

    app = QtGui.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM