代码之家  ›  专栏  ›  技术社区  ›  johnashu

当QPlainTextEdit处于特定长度时运行方法

  •  0
  • johnashu  · 技术社区  · 7 年前

    我有一个pyqt对话框,它接收以返回结束的数据列表(来自自动返回的条形码扫描仪)

    列表长度为5项,当前我必须单击“添加数据”来运行 populate_row 方法输入5项。

    \n

    有没有办法自动按下 add data \不 达到5分 QPlainTextEdit 盒子?

    import sys
    
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui import *
    from PyQt5.QtCore import *
    
    class Status(QDialog):
        def __init__(self, parent=None):
            super(Status, self).__init__(parent)
    
            self.label = QLabel()
    
            self.btn = QPushButton("Input Data")
            self.btn.clicked.connect(self.populate_row)
    
            self.layout = QVBoxLayout()
    
            self.layout.addWidget(self.btn)
            self.layout.addWidget(self.label)
    
            self.resize(660, 260)
            self.setLayout(self.layout)
    
        def populate_row(self, letter):
            self.dialog = QDialog()
    
            self.dialog.resize(660, 260)
    
            self.textBox = QPlainTextEdit(self.dialog)
    
            Rbtn = QPushButton("Add Data")
            Rbtn.clicked.connect(
                lambda: self.enter_data(self.textBox.toPlainText()))
    
            layout = QVBoxLayout(self.dialog)
            layout.addWidget(self.textBox)
            layout.addWidget(Rbtn)
    
            self.dialog.exec_()
    
        def enter_data(self, text):
            self.label.setText(text)
    
            lst = text.split("\n")
            try:
                for  x in lst:
                    if x != "":
                        print(x)
                        self.do_something_with_x()
            except IndexError:
                pass
    
            self.update_data()
    
            self.dialog.close()
    
        def do_something_with_x(self):
            print('Something done with x..')
    
        def update_data(self):
            print('Data updated..')
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        ex = Status()
        ex.show()
        sys.exit(app.exec_())
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   eyllanesc    7 年前

    要计算换行符,请使用 blockCountChanged() 如果你想点击这个按钮,你必须使用 click()

    import sys
    from PyQt5 import QtCore, QtGui, QtWidgets
    
    
    class Status(QtWidgets.QDialog):
        def __init__(self, parent=None):
            super(Status, self).__init__(parent)
            self.label = QtWidgets.QLabel()
            self.btn = QtWidgets.QPushButton("Input Data")
            self.btn.clicked.connect(self.populate_row)
            layout = QtWidgets.QVBoxLayout(self)
            layout.addWidget(self.btn)
            layout.addWidget(self.label)
            self.resize(660, 260)
    
    
        def populate_row(self, letter):
            self.dialog = QtWidgets.QDialog()
            self.dialog.resize(660, 260)
            self.textBox = QtWidgets.QPlainTextEdit()
            self.textBox.blockCountChanged.connect(self.blockCount)
            self.Rbtn = QtWidgets.QPushButton("Add Data")
            self.Rbtn.clicked.connect(self.runcode)
            layout = QtWidgets.QVBoxLayout(self.dialog)
            layout.addWidget(self.textBox)
            layout.addWidget(self.Rbtn)
            self.dialog.exec_()
    
        @QtCore.pyqtSlot(int)
        def blockCount(self, num):
            if num > 5: self.Rbtn.click()
    
        def runcode(self):
            self.enter_data(self.textBox.toPlainText())
    
        def enter_data(self, text):
            self.label.setText(text)
            for  x in text.split("\n"):
                if x:
                    print(x)
                    self.do_something_with_x()
            self.update_data()
            self.dialog.close()
    
        def do_something_with_x(self):
            print('Something done with x..')
    
        def update_data(self):
            print('Data updated..')
    
    if __name__ == "__main__":
        app = QtWidgets.QApplication(sys.argv)
        ex = Status()
        ex.show()
        sys.exit(app.exec_())
    
        2
  •  1
  •   Community Mohan Dere    6 年前

    void QPlainTextEdit::blockCountChanged(int newBlockCount)

    每当块计数改变时,就会发出这个信号。在newBlockCount中传递新的块计数。

    import sys
    from PyQt5.QtWidgets import *
    from PyQt5.QtGui     import *
    from PyQt5.QtCore    import *
    
    class Status(QDialog):
        def __init__(self, parent=None):
            super(Status, self).__init__(parent)
    
            self.label = QLabel()
    
            self.btn = QPushButton("Input Data")
            self.btn.clicked.connect(self.populate_row)
    
            self.layout = QVBoxLayout()
    
            self.layout.addWidget(self.btn)
            self.layout.addWidget(self.label)
    
            self.resize(660, 260)
            self.setLayout(self.layout)
    
        def populate_row(self, letter):
            self.dialog = QDialog()
    
            self.dialog.resize(660, 260)
    
            self.textBox = QPlainTextEdit(self.dialog)
            #
            self.textBox.blockCountChanged[int].connect(self.blockCount)  # +++
            
            
    
            Rbtn = QPushButton("Add Data")
            Rbtn.clicked.connect(
                lambda: self.enter_data(self.textBox.toPlainText()))
    
            layout = QVBoxLayout(self.dialog)
            layout.addWidget(self.textBox)
            #layout.addWidget(Rbtn)                                       # ---
    
            self.dialog.exec_()
    ## +++
        def blockCount(self, num):
            if num > 5:
                self.enter_data(self.textBox.toPlainText())
    ##
    
        def enter_data(self, text):
            self.label.setText(text)
            lst = text.split("\n")
            try:
                for  x in lst:
                    if x != "":
                        print(x)
                        self.do_something_with_x()
            except IndexError:
                pass
    
            self.update_data()
    
            self.dialog.close()
    
        def do_something_with_x(self):
            print('Something done with x..')
    
        def update_data(self):
            print('Data updated..')
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        ex = Status()
        ex.show()
        sys.exit(app.exec_())
    

    enter image description here