首页 > 解决方案 > 当 QPlainTextEdit 在一定长度时运行方法

问题描述

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

该列表的长度为 5 项,目前我必须在populate_row输入 5 项时单击“添加数据”才能运行该方法。

我将字符串拆分为一个列表,\n并根据需要处理每个项目。

当框中add data的行数或数量\n达到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_())

标签: pythonpython-3.xpyqtpyqt5

解决方案


无效 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_())

在此处输入图像描述


推荐阅读