【问题标题】:Add multiple trailing qactions to lineedit将多个尾随 qaction 添加到 lineedit
【发布时间】:2020-10-22 18:08:24
【问题描述】:

我正在尝试为文本搜索和过滤完成 lineEdit,类似于 vscode 等应用程序中的那些:

Qt 的 lineedit 有一个“内置”清除按钮操作,类似于我正在寻找的操作。我查看了 qlineedits c++ 源代码并构建了一个修改后的函数,该函数添加了自定义清除操作。是否可以将多个尾随操作彼此相邻添加到类似于上面引用的示例的 lineedit?

class ULineEdit(QtWidgets.QLineEdit):
    def __init__(self,
            defaultText: str = "",
            isReadOnly: bool = False,
            isClearButtonEnabled: bool = True,
            parent=None
            ):

        super(ULineEdit, self).__init__()
        self.setText(defaultText)
        self.setReadOnly(isReadOnly)

        self.setClearButtonEnabled(isClearButtonEnabled)

        self.setSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed)

    # override When readOnly is set to QLineEdit it disables QToolButton (clear button)
    def setClearButtonEnabled(self, enable: bool = True):
        if enable == True:
            clearAction = UAction.UClearAction(parent=self)
            clearAction.triggered.connect(self.clear)
            self.textChanged.connect(clearAction.dynamicVisibility)
            self.addAction(clearAction, QtWidgets.QLineEdit.TrailingPosition)
            # default state
            clearAction.dynamicVisibility(self.text())
        else:
            clearAction = UAction.getClearAction(self)
            if clearAction is not None:
                self.removeAction(clearAction)

【问题讨论】:

    标签: python pyqt5 pyside2


    【解决方案1】:

    你必须使用QLineEditaddAction()方法:

    from PyQt5 import QtWidgets
    
    
    class ULineEdit(QtWidgets.QLineEdit):
        def __init__(
            self,
            defaultText: str = "",
            isReadOnly: bool = False,
            isClearButtonEnabled: bool = True,
            parent=None,
        ):
    
            super(ULineEdit, self).__init__()
            self.setText(defaultText)
            self.setReadOnly(isReadOnly)
    
            self.setClearButtonEnabled(isClearButtonEnabled)
    
            self.setSizePolicy(
                QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed
            )
    
            foo_action = QtWidgets.QAction(self)
            icon = self.style().standardIcon(QtWidgets.QStyle.SP_DesktopIcon)
            foo_action.setIcon(icon)
            self.addAction(foo_action, QtWidgets.QLineEdit.TrailingPosition)
    
            bar_action = QtWidgets.QAction(self)
            icon = self.style().standardIcon(QtWidgets.QStyle.SP_DirIcon)
            bar_action.setIcon(icon)
            self.addAction(bar_action, QtWidgets.QLineEdit.TrailingPosition)
    
    
    def main():
        app = QtWidgets.QApplication([])
        w = ULineEdit()
        w.show()
        app.exec_()
    
    
    if __name__ == "__main__":
        main()
    

    【讨论】:

    • 哦,那么抱歉这个问题。我之前尝试过,但 Qt 将这些操作相互叠加。那时我可能犯了另一个错误。无论如何,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多